Здається, проблема значною мірою залежить від версії. У Ubuntu 14.04 LTS типовим nginx є застарілий 1,4. Спочатку потрібно встановити версію на основі PPA
https://leftshift.io/upgrading-nginx-to-the-latest-version-on-ubuntu-servers
показує, як це зробити за допомогою:
sudo add-apt-repository ppa:nginx/stable
sudo aptitude safe-upgrade
Ви повинні закінчити:
nginx -v
nginx version: nginx/1.8.0
Конфігурація з @ xatr0z відповідь https://serverfault.com/a/636455/162693, що вказує на http://www.senginx.org/en/index.php/Proxy_HTTPS_Client_Certificate
не працює:
неробоча пропозиція
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;
}
}
не працює з коробки з 1.8.0. Це, мабуть, означає лише підказку і не використовуватиметься як файл конфігурації як такий або залежить від іншої версії.
Я тестую на сервері Akend2 на основі apache2 з включеними SSL та сертифікатами клієнта з власним підписом SSLOptions конфігурації Apache встановлені на:
SSLOptions +ExportCertData +FakeBasicAuth + StdEnvVars
Це полегшує налагодження ситуації, оскільки в скрипті phpinfo () на задній панелі відображатиметься інформація про сервер та клієнтську сторону.
Щоб перевірити це, я використав:
https: // бекенд / тест / phpinfo
із сертифікатом SSL, встановленим у браузері, і я отримую такі розділи, як: SSL_SERVER_S_DN_CN для сертифіката сервера та SSL_CLIENT_S_DN_CN для сертифіката клієнта.
В якості першого запуску я використовував (заповнюючи частини в дужках) для налаштування nginx на сервері Frontend B:
server {
listen 8080;
server_name <frontend>;
location / {
proxy_buffering off;
proxy_pass https://<backend>;
#proxy_ssl_certificate certs/<SSL Client Certificate>.crt;
#proxy_ssl_certificate_key certs/<SSL Client Certificate>.key;
}
}
видалення конкретної частини сертифіката клієнта SSL лише для того, щоб перевірити, чи працює сам зворотний проксі.
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
nginx stop/waiting
nginx start/running, process 8931
Тепер http: // frontend: 8080 / test / phpinfo.php працює The
SSL_SERVER_S_DN_CN для серверного сертифіката відображається, а SSL_CLIENT_S_DN_CN для клієнтського сертифіката ще не відображається
Тепер після коментарів:
server {
listen 8080;
server_name <frontend>;
location / {
proxy_buffering off;
proxy_pass https://<backend>;
proxy_ssl_certificate certs/<SSL Client Certificate>.crt;
proxy_ssl_certificate_key certs/<SSL Client Certificate>.key;
}
}
і перевірка / перезапуск
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart
nginx stop/waiting
nginx start/running, process 8931
http: // frontend: 8080 / test / phpinfo.php працює і
SSL_SERVER_S_DN_CN для сертифіката сервера відображається і SSL_CLIENT_S_DN_CN для сертифіката клієнта відображається
тому зараз у нас працює так, як просили.
Зверніть увагу на помилку https://trac.nginx.org/nginx/ticket/872#ticket