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;
}
}
1 ответ
@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;
}
}