Назад | Перейти на главную страницу

nginx с несколькими сертификатами, letsencrypt и самоподписанным

Я бы хотел использовать Nginx в качестве внешнего SSL-прокси с сертификатами Letsencrypt, а также ограничить клиентский доступ к определенным внутренним серверам с помощью другого (самоподписанного) сертификата. Я не могу использовать Letsencrypt для обоих, поскольку он не предлагает клиентские сертификаты. Как я могу использовать две разные цепочки сертификатов: Letsencrypt для защиты трафика и самоподписанный для аутентификации клиента? Я читал это в Nginx v1.11 ssl_certificate Директива может быть указана несколько раз, и я пробовал эту конфигурацию ниже, но браузер отказался подключаться. Я подозреваю, что это связано с тем, что браузеру представляется неправильная цепочка.

server {
    listen              443 ssl;

    server_name         <frontend>;
    include             snippets/letsencrypt.conf; # <=== Letsencrypt certs
    include             snippets/ssl-params.conf;

    # Mandatory certificate request setup, self-signed certs
    ssl_certificate         /etc/nginx/certs/server.crt;
    ssl_certificate_key     /etc/nginx/certs/server_np.key;
    ssl_client_certificate  /etc/nginx/certs/ca.crt;
    ssl_verify_client       on;


    location /secret {
        proxy_pass      http://192.168.122.100:80/secret;
        proxy_redirect      http://192.168.122.100:80/secret https://<frontend>/secret;
        proxy_set_header    X-Real-IP  $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Forwarded-Port 443;
        proxy_set_header    Host $host;
    }
}

@Sven: Собственно, предложенная конфигурация работает. @garethTheRed: да, вы правы, ssl_certificate и ssl_client_certificate не связаны

Полная рабочая конфигурация.

server {
    listen                  443 ssl;

    server_name             <frontend>;
    include                 snippets/ssl-params.conf;

    ssl_certificate         /etc/nginx/certs/letsencrypt_fullchain.crt;
    ssl_certificate_key     /etc/nginx/certs/letsencrypt.key;

    # Mandatory certificate request setup, self-signed certs
    ssl_client_certificate  /etc/nginx/certs/ca_to_verify_agains_not-not_letsencrypt.crt;
    ssl_crl                 /etc/nginx/certs/ca_to_verify_agains_not-not_letsencrypt.crl;
    ssl_verify_client       on;

    location /secret {
        proxy_pass          http://192.168.122.100:80/secret;
        proxy_redirect      http://192.168.122.100:80/secret https://<frontend>/secret;
        proxy_set_header    X-Real-IP  $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_set_header    X-Forwarded-Port 443;
        proxy_set_header    Host $host;
    }
}