对于我们公司的 3 台服务器,Bitsight 报告称我们的 Diffie-Hellman 素数非常常用且不安全。我们已遵循以下指示:https://weakdh.org/sysadmin.html多次尝试,它在我们的其他服务器上都有效。但是,无论我们做什么,这 3 个服务器都不会更新。我们注意到的一件事是,这 3 个服务器都是虚拟机。每个都在 Ubunutu 18.04.6 LTS 上。是否有我们尚未检查或可能遗漏的内容导致此值无法更新?
答案1
这与虚拟机与裸机或其他任何东西都无关。
这是因为您的系统依赖于 Web 服务器本身中预编译的 DH 密钥 - Apache、NGINX 等都具有自己预先编译好的 DH 密钥。
解决这个问题的方法是生成您自己的 DH 参数,然后为您的配置提供该参数并告诉 Web 服务器使用这些 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 配置。
就我个人而言,我借用了Mozilla 的 SSL 配置生成器,并使用这组中级密码中的密码字符串,但去掉纯 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 密码(但不是不受 WeakDH 影响的 ECDHE 密码),从而完全绕过该dhparam
问题。