Настройка HTTPS в nginx: A+ на SSLLabs
Всем привет! О преимуществах перехода на HTTPS, а также о процедуре получения бесплатного сертификата от WoSign было рассказано в начале этой статьи: https://php.zone/post/93. Тут же мы рассмотрим именно техническую сторону реализации и добьёмся максимальной оценки на сервисе SSLLabs - это ребята, оценивающие правильность настройки HTTPS на сайте.
Для начала нужно создать файл, содержащий в себе последовательно идущие сертификат сайта и промежуточный сертификат удостоверяющего центра.
Для этого выполним команду:
cat /etc/ssl/2_domain.com.crt /etc/ssl/1_root_bundle.crt > /etc/ssl/combined.crt
Для усиления криптостойкости необходимо использовать файл параметров Диффи — Хеллмана с длиной не менее 4096 бит. Создадим такой файл:
openssl dhparam -out /etc/ssl/dh4096.pem 4096
В секцию http (как правило в файле /etc/nginx/nginx.conf) добавляем следующие строки:
http{
...
ssl_prefer_server_ciphers on;
ssl_session_cache shared:TLS:2m;
ssl_session_timeout 2m;
...
}
А в секции server для виртуального хоста указываем следующие директивы:
server {
listen 443 ssl;
server_name domain.com www.domain.com;
ssl_certificate /etc/ssl/combined.crt;
ssl_certificate_key /etc/ssl/3_domain.com.key;
ssl_dhparam /etc/ssl/dh4096.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';
}
Теперь подробнее об используемых директивах.
ssl_prefer_server_ciphers on; — указывает, чтобы при использовании протоколов TLS серверные шифры были более приоритетны, чем клиентские.
ssl_session_cache shared:TLS:2m; — тип и объём кэша для хранения параметров сессий. Параметр shared задает общий для всех рабочих процессов nginx кэш, 2m — объем кэша.
ssl_session_timeout 5m; — таймаут сессии в кэше (5 минут).
ssl_certificate /etc/ssl/combined.crt; — файл, содержащий сертификат сайта и корневой сертификат УЦ.
ssl_certificate_key /etc/ssl/3_domain.com.key; — закрытый ключ.
ssl_dhparam /etc/ssl/dh4096.pem; — файл параметров Диффи — Хеллмана.
ssl_protocols TLSv1.2 TLSv1.1 TLSv1; — поддерживаемые протоколы. Обратите внимание, здесь отсутствует SSLv3, IE6 не будет поддерживаться.
ssl_ciphers EECDH+ECDSA+AESGCM…; — наборы шифров, данный набор включает forward secrecy.
add_header Strict-Transport-Security ‘max-age=31536000; includeSubDomains’; — передача Strict-Transport-Secutiry заголовка, указывающего браузеру что сайт доступен только по https. В нашем случае срок данного правила устанавливается на год, и распространяется на все поддомены.
После сохранения изменений перезапускаем nginx командой:
service nginx restart
Проверяем свой сайт на сайте ssllabs.com. Если всё правильно настроено, будет получена оценка A+.
Комментарии