Я зарегистрировался на 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 + промежуточные ЦС + корневой ЦС (в этом порядке) в один файл и использовать этот файл в 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 VERIFIED $ssl_client_verify;
fastcgi_param DN $ssl_client_s_dn;
...