Отличается ли процесс генерации ключей сервера SSL/TLS на виртуальных машинах?
Bitsight сообщает, что для трех серверов нашей компании наше простое число Диффи-Хеллмана очень часто используется и небезопасно. Мы несколько раз следовали инструкциям здесь: https://weakdh.org/sysadmin.html , и это сработало с другими нашими серверами. Однако эти 3 не обновляются, что бы мы ни делали. Мы заметили одну вещь: все эти три сервера являются виртуальными машинами. Каждый из них находится на Ubunutu 18.04.6 LTS. Есть ли что-то, что мы не проверили или упустили, что препятствует обновлению этого значения?
1 ответ
Это не имеет ничего общего с виртуальными машинами и голым железом или чем-то еще.
Это результат того, что ваши системы полагаются на предварительно скомпилированные ключи DH на самих веб-серверах - Apache, NGINX и т. д. имеют свои собственные ключи DH, которые легко доступны в предварительно скомпилированном виде.
Способ решения этой проблемы — создать свои собственные параметры DH, а затем предоставить их для вашей конфигурации и указать веб-серверам использовать эти параметры DH.
Чтобы сгенерировать dhparams:
sudo openssl dhparam 2048 > /etc/ssl/dhparam.pem
После этого вам просто нужно настроить свои веб-серверы для их использования.
Для Apache 2.4.x добавьте это в конфигурацию своих сайтов, где вы настраиваете сертификаты SSL:
SSLOpenSSLConfCmd DHParameters "/etc/ssl/dhparam.pem"
Для NGINX добавьте это в свою конфигурацию, где настроены ваши SSL-сертификаты:
ssl_dhparam /etc/ssl/dhparam.pem
Обратите внимание, что вам необходимо сгенерировать это в каждой системе независимо, чтобы отключить предупреждения.
Рекомендация отраслевого стандарта DHParam — 2048 бит.
Альтернативно, настройте шифры SSL так, чтобы НЕ использовать конфигурацию DH напрямую.
Лично я заимствую строки шифрования из генератора конфигурации SSL Mozilla и использую этот набор строк шифрования из шифров среднего уровня, но удаляю чистые шифры DH (так что dhparams не является проблемой в этом случае).
Строка шифрования, которую я использую, такова:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
из промежуточных конфигураций. Mozilla рекомендует это для общего использования серверов и в тех случаях, когда вам не нужна устаревшая поддержка старых систем. ( Подробнее см. https://wiki.mozilla.org/Security/Server_Side_TLS )
Затем мы указываем это в конфигурациях для шифров SSL.
Для любой системы Apache недавнего выпуска (даже версии 18.04 или более поздней) мы указываем это, где вы настраиваете свои сертификаты/настройки SSL для рекомендуемых настроек (за исключением шифров DHE, но включая шифры ECDHE, которые представляют собой шифры с эллиптической кривой):
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305
Для NGINX это строки конфигурации, которые нужно добавить в соответствии со стандартными рекомендациями:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
Это не позволит вашей системе (системам) полностью использовать шифры DHE (но не шифры ECDHE, на которые не влияет WeakDH), минуяdhparam
проблема целиком.