Настройка 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+.

loader
Комментарии
К этому посту больше нельзя оставлять новые комментарии
Логические задачи с собеседований