Готовим NGINX к проверке PCI Compliance, поднимаем безопасность SSL соединений и устраняем уязвимости.
ssl_session_timeout
Разрешаем возобновление сессий при помощи TLS session tickets
Задаем тип и размер кэшей для хранения параметров сессии.
Кеш необходим для возможности повторного использования ключей сессии, таким образом при установлении нового соединения будут использоваться старые ключи, т.е. не будет повторно производиться хендшейк.
ssl_session_cache shared:SSL:10m; |
ssl_prefer_server_ciphers
Указывает, чтобы при использовании протоколов SSLv3 и TLS серверные шифры были более приоритетны, чем клиентские. (nginx ©)
ssl_prefer_server_ciphers on; |
Исключаем возможность BEAST-атаки CVE-2011-3389
ssl_ciphers
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5; |
Указывает используемые шифры. За счет изменения набора шифров настраивается Forward Secrecy. От стандартного набора, предлагаемого NGINX, отличается только параметром !kEDH
,
Также рекомендую в nginx.conf
в секцию http
добавить параметр
ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH; |
для того, что бы шифрам с CBC-режимом предпочитался RC4-SHA, так как они подвержены уязвимостям.
add_header Strict-Transport-Security max-age
Strict-Transport-Secutiry — заголовок, указывающий браузеру на то, что сайт доступен только по https. Это предотвращает возможность перехода обратно на http-версию для последующей атаки через незашифрованное соединение.
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; |
ssl_stapling
Позволяет серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей. Для работы этой функции нужно указать DNS-сервер, что и делается директивой resolver
.
ssl_stapling on; |
Перезагружаем NGINX
systemctl restart nginx |
Проверяем SSL соединение на SSL Labs