В криптографии термин «совершенная прямая секретность» (PFS) означает, что если третья сторона узнает какой-либо сеансовый ключ, то она сможет получить лишь доступ к данным, защищенным лишь этим ключом. Для сохранения совершенной прямой секретности ключ, используемый для шифрования передаваемых данных, не должен использоваться для получения каких-либо дополнительных ключей. Также, если ключ, используемый для шифрования передаваемых данных, был получен на базе какого-то еще ключевого материала, этот материал не должен использоваться для получения каких-либо других ключей.
Когда в openSSL была обнаружена ошибка переполнения буфера Hearbleed, стало ясно, что PFS является обязательной для любой системы, которая использует SSL/TLS.
Настроим NGINX для работы с PFS.
Внимание! Если в обычных случаях рекомендуется запускать количество процессов по желанию сервера nginx, то при реализации https число процессов рекомендуется принудительно увеличить, чтобы число процессов в 2-4 раза превышало количество ядер аппаратной платформы.
Зайдём в директорию конфигурации NGINX:
cd /etc/nginx/
Нам нужно установить протокол Ди́ффи-Хе́ллмана, который достаточно эффективeн. Считается, что 4096 бит является излишеством и вызовет чрезмерную нагрузку на ЦП системы, но с современной вычислительной мощностью это является стоящим компромиссом.
openssldhparam -out dh4096.pem 4096
Удобно, когда файл конфигурации, специальный для каждой отдельной задачи, разделен в файл с исходным текстом, что делает реализацию PFSна различных системах проще. Откроем в блокноте файл конфигурации/etc/nginx/perfect-forward-secrecy.conf
Вставим в файл следующее:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM
EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256
EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS
!MEDIUM";
ssl_dhparamdh4096.pem;
Затем изменим файл конфигурации NGINX, добавив следующую строку в файл конфигурации NGINX (стандартно, /etc/nginx/nginx.conf), в нижней части(и в пределах) блокаhttp {}:
# После строк, включающих:/sites-enabled/, необходимо добавить:
include perfect-forward-secrecy.conf;
Для того, чтобы подтвердить внесённые изменения, перезапустимNGINX:
service nginx restart
Если в тесте https://www.ssllabs.com/ssltest/analyze.html отображается красным цветом «Session resumption (caching) No (IDs assigned but not accepted)» и сервер использует SNI, добавим следующее на верхний уровень блока http {}:
ssl_session_cache shared:SSL:10m;
Снова перезапустим NGINX, чтобы изменения вступили в силу:
service nginx restart
Теперь тест больше не должен определять ошибку. (хотя ошибка не уменьшает общих баллов в тесте).
Реализация HTTP Strict Transport Security (HSTS) с большей длительностью
Этот пункт стоит выполнить при условии, что:
1.Вы хотите установить SSL для всех ресурсов любого хоста, для которого установлен заголовок (т.е. каждая страница на сайтe).
2.Вам необходима возможность принимать или игнорировать SSL предупреждения для любого запрошенного ресурса с любого хоста, для которого установлен заголовок, например "Domain Name Mismatch" и т.д. Смысл HSTSзаключается в том, что предупреждения и ошибки, относящиеся к сертификату SSLне могут быть отменены.
Добавим следующие строки в нижнюю часть файл конфигурации/etc/nginx/perfect-forward-secrecy.confи сохраним изменения:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
add_header X-Frame-Options SAMEORIGIN;
Только при перезагрузке в NGINX вступят в силу именно необходимые нам изменения:
service nginx reload
Теперь выясним, работает ли HSTS как положено, пройдя тестирование на сайте www.ssllabs.com/ssltest/analyze.html. Если HSTS реализован верно, мы увидим оценку в зелёном квадрате, со следующей надписью: "This server supports HTTP Strict Transport Security with long duration. Gradesetto A+."
Поздравляю, теперь у вас одна из самых безопасных реализаций SSL/TLSв Интернете. Ура!
Дискуссия
Написал Rocky 9
Опубликовано в: Установка nginx c PHP-FPM под CentOS 7.0 in LinuxНаписал Константин
Опубликовано в: Докеризация стека LEMP под Ubuntu c помощью Compose in LinuxНаписал bammbr
Опубликовано в: Шлюз для маленького отдела на Red Hat 9 in LinuxНаписал Федор
Опубликовано в: Установка и конфигурация Samba на CentOS 7 in LinuxНаписал Evgenytrl
Опубликовано в: Загрузка файлов с помощью Wget in Linux