Всем привет.
Cегодня наша цель — подготовка Nginx к прохождению PCI Compliance. Если конкретнее, то SSL протоколов и шифрования. Ну или просто поднять безопастность наших SSL соединений и избавиться от уязвимостей.
Всего то и нужно, что привести часть конфига вот в такой вид:)
ssl_certificate /etc/nginx/card.pem;
ssl_certificate_key /etc/nginx/card.key;
ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH;
ssl_session_cache shared:SSL:10m;
ssl_prefer_server_ciphers on;
Однако добавлю немного подробностей, рассмотрим по пунктам.
Если у вас последнии версии nginx, то скорее всего по умолчанию будут «стойкие» шифры. Но все же, мы немного поменяем дефолтные значения:
ssl_ciphers RC4:HIGH:!aNULL:!MD5:!kEDH;
Это делаем, для того, что бы шифрам с CBC-режимом предпочитался RC4-SHA, так как они подвережены уязвимостям.
Посмотреть полный лист шифров можно командой:
openssl ciphers
Исключаем возможность BEAST-атаки CVE-2011-3389:
ssl_prefer_server_ciphers on;
Подключаем кеш SSL сессий, это избавит нас от постоянных SSL handshake при повторных соединениях, и добавит несколько баллов в конечном тесте. В 1 мегабайт кэша помещается около 4000 сессий.
ssl_session_cache shared:SSL:10m;
Если версия вашего nginx ниже 1.0.5, то стоит добавить:
ssl_protocols SSLv3 TLSv1;
Идем на тест от SSL Labs и получаем «Grade А» и «PCI Compliance Yes»:
Полезные ссылки:
Nginx.org Настройка HTTPS-серверов
SSL/TLS Deployment Best Practices
SSL Server Rating Guide
Автор: astlock