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