Я зарегистрировался на startssl.com и поэтому получил 4 файла для своего домена:
, чтобы удалить пароль, который я сделал:
openssl rsa -in ssl.key -out ssl.key.nopwd
Затем я настроил свою конфигурацию nginx:
server {
listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/ssl.crt;
ssl_certificate_key /etc/nginx/ssl/ssl.key.nopwd;
keepalive_timeout 70;
fastcgi_param SSL_VERIFIED $ssl_client_verify;
fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial;
fastcgi_param SSL_CLIENT_CERT $ssl_client_cert;
fastcgi_param SSL_DN $ssl_client_s_dn;
server_name ***;
root /var/www/***;
}
После перезапуска nginx я могу успешно войти на свой сайт через https. Но теперь я хочу обезопасить свой сайт и предоставить к нему доступ только с сертификатом, установленным в клиентском браузере. Насколько я понимаю, я должен настроить его в конфигурации nginx:
ssl_client_certificate etc/nginx/ssl/[WHAT_SHOULD_BE_HERE?]
ssl_verify_client on;
Но на какой файл мне указать? Как я могу сгенерировать сертификат клиента из серверного?
Пожалуйста, посмотрите этот ответ . Но вот краткая версия того, что должно произойти:
Использование ssl.crt
как таковое недостаточно, вам следует объединить ssl.crt + промежуточный ЦС + корневой ЦС (в этом order) в один файл и используйте этот файл в операторе ssl_certificate
.
Вам необходимо объединить промежуточные ЦС + корневой ЦС вашего сертификата КЛИЕНТА в один файл и добавив его в оператор ssl_client_cerificate
.
Необязательно, но настоятельно рекомендуется, настройте правило, какие имена субъектов сертификата клиента вам требуются (например, CN, O, OU, DC и т. д.), проанализировав $ ssl_client_s_dn
переменная.
Также настоятельно рекомендуется включить сшивание OSCP, объединив Промежуточный ЦС + Корневой ЦС вашего СЕРВЕРА и добавив его в оператор ssl_trusted_certificate
следующим образом :
ssl_trusted_certificate /etc/nginx/ssl/ocsp-chain.crt;
ssl_stapling on;
ssl_stapling_verify on;
Вы также можете передать информацию о сертификате в ваш модуль fastcgi:
...
fastcgi_param ПРОВЕРЕНО $ ssl_client_verify;
fastcgi_param DN $ ssl_client_s_dn;
...