Proxy HTTPS Client Certificate

Содержание

Обзор

Эта функция расширяет возможности прокси-модуля nginx, поддерживая установку https-соединения с backend-сервером с указанными пользовательскими сертификатами. Эта функция в основном используется, когда backend сервер разрешает "Client Certificate Verification".
Кроме того, можно использовать обратную аутентификацию HTTPS, проверяя сертификат сервера установкой сертификата CA в SEnginx.
Эта функция появилась в версии 1.5.13

Директивы

proxy_ssl_certificate

Синтаксис proxy_ssl_certificate file;
По умолчанию
Контекст http/server/location

Указывает сертификат формата PEM, который используется для установки https-соединения с backend сервером. Эта директива подобна директиве ssl_certificate в nginx.

proxy_ssl_certificate_key

Синтаксис proxy_ssl_certificate_key file;
По умолчанию
Контекст http/server/location

Указывает секретный ключ в формате PEM. Эта директива подобна директиве ssl_certificate_key в nginx.

proxy_ssl_verify_server

Синтаксис proxy_ssl_verify_server off | on | optional | optional_no_ca;
По умолчанию off
Контекст http/server/location

Разрешает проверку серверных сертификатов. Параметры такие же, как у директивы ssl_verify_client в nginx.

proxy_ssl_verify_depth

Синтаксис proxy_ssl_verify_depth number;
По умолчанию 1
Контекст http/server/location

Устанавливает глубину проверки в цепочке серверных сертификатов. Эта директива подобна директиве ssl_verify_depth в nginx.

proxy_ssl_server_certificate

Синтаксис proxy_ssl_server_certificate file;
По умолчанию
Контекст http/server/location

Указывает файл в формате PEM с доверенными CA сертификатами, которые используются для проверки серверных сертификатов. Эта директива подобна директиве ssl_client_certificate в nginx.

Примеры

Создайте следующие сертификаты/ключи с помощью команды openssl:

  • ca.crt
  • server.crt/server.key
  • client.crt/client.key

server.crt и client.crt сгенерированы с ca.crt.
server.key и client.key - секретные ключи для соответствующих файлов crt. Скопируйте server.crt/server.key/ca.crt на https backend сервер. Скопируйте client.crt/client.key/ca.crt на сервер SEnginx, работающий в качестве reverse proxy.

Пример проксирования на Backend сервер c разрешенной верификацией

Создайте блок server на https backend сервере и разрешите верификацию. Следующий пример для SEnginx/nginx, но вы можете использовать другой веб-сервер:

server {
    listen 443 ssl;


    ssl_certificate        certs/server.crt;
    ssl_certificate_key    certs/server.key;
    ssl_verify_client      on;
    ssl_client_certificate certs/ca.crt;


    ...
}

Конфигурация SEnginx в качестве reverse proxy сервера:

backend {
    server some-ip:443;
}

server {
    listen 80;


    location / {
        proxy_ssl_certificate        certs/client.crt;
        proxy_ssl_certificate_key    certs/client.key;


        proxy_pass https://backend;
    }
}

Пример обратной HTTPS аутентификации

Конфигурация backend сервера не меняется. Далее конфигурация reverse proxy сервера:

backend {
    server some-ip:443;
}

server {
    listen 80;


    location / {
        proxy_ssl_certificate        certs/client.crt;
        proxy_ssl_certificate_key    certs/client.key;
        proxy_ssl_verify_server      on;
        proxy_ssl_server_certificate certs/ca.crt;


        proxy_pass https://backend;
    }
}