![尝试在 ssllabs.com 密钥交换中获得 100%](https://linux22.com/image/711665/%E5%B0%9D%E8%AF%95%E5%9C%A8%20ssllabs.com%20%E5%AF%86%E9%92%A5%E4%BA%A4%E6%8D%A2%E4%B8%AD%E8%8E%B7%E5%BE%97%20100%25.png)
我想知道需要哪些步骤才能在 ssllabs.com 上获得每个类别的 100%。我知道这可能会导致旧系统出现问题,但我不在乎。
我的 letsencrypt.org 证书使用 4096 位。这是我使用以下配置可以获得的最佳分数:
SSLCipherSuite AES256+EECDH:AES256+EDH:!aNULL
SSLHonorCipherOrder on
SSLProtocol all -TLSv1.1 -TLSv1 -SSLv3 -SSLv2
我读某处可以使用预生成的 dhparam 文件来改进密钥交换。
因此我使用以下方式生成了这个文件openssl dhparam -out dhparam.pem 4096
(这大约花了一个小时),并使用以下方式将其添加到我的 Apache 配置中:
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
但结果与之前的分数相同。那么我这里遗漏了什么?
答案1
从 2017-10 开始,如果你正在使用 Diffie-Hellman,你应该两个 DH 参数和相当于 4096 位 RSA 密钥。
您至少要为 2048 位密钥提供一个证书。该证书中还包含不寻常的元数据,请检查(默认的骗子证书表示“我不为非 SNI 客户提供服务”,通常只包含主机名Common Name
)
编辑:如果您专门向非 SNI 客户端提供证书,您将不会在 SSL Labs 评级中受到惩罚。如果您将弱密钥证书作为证书链的一部分提供给已知根,您也不会受到惩罚。
对于依赖 DHE 或 ECDHE 密钥交换的套件,在确定整个握手的强度时会考虑 DH 参数的强度。许多支持 DHE 的服务器使用提供 1024 位安全性的 DH 参数。在这样的服务器上,密钥交换的强度永远不会超过 1024 位,即使私钥更强(通常为 2048 位)。
评级指南没有说明,但我能够确认,如果您的服务器更喜欢secp256v1
(相当于 3k 位 RSA)同时提供可以使用的 ECDHE 密码secp384v1
(相当于 7k 位 RSA),那么您无法获得 100 评级。
Chrome 57 / Win 7
R
RSA 4096 (SHA256)
TLS 1.2 > http/1.1
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
ECDH secp256r1 FS
Apache 手册确实列出了一个强制执行此操作的选项(仅Curves
按强度对参数进行排序似乎不够)
兼容性:如果使用 OpenSSL 1.0.2 或更高版本,则可在 httpd 2.4.8 及更高版本中使用 SSLOpenSSLConfCmd ECDHParameters brainpoolP256r1
https://httpd.apache.org/docs/2.4/mod/mod_ssl.html#sslopensslconfcmd
如果您在此处命名一条可被视为等同于 RSA >=4096 位的曲线,则 SSL 实验室将使用它来处理您的 ECDHE 密码 - 列出无法再与您的服务器成功握手的客户端,因为它们不支持该曲线。
仔细调查你希望支持的浏览器列表,选择非标准 EC 曲线将要使许多旧版浏览器无法访问您的网站!