SSL 操作失败,代码 1:dh 密钥太小

SSL operation failed with code 1: dh key too small

我正在通过 SSL 连接到我的数据库 Google 云 SQL。我使用 codeigniter 3.0 来执行此操作,尽管对 mysqli 驱动程序进行了一些修改以允许此功能。

几个月来一直运行良好。然而它只是开始return这个警告:

Message: mysqli::real_connect(): SSL operation failed with code 1. OpenSSL Error messages: error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small

我假设 DH Key is too small 是主要问题,但我不知道这意味着什么。我用谷歌搜索了 Diffie–Hellman 密钥交换以及 "key too small" 消息,但我运气不佳。

这是否表明服务器上的密钥已被篡改?我检查了它们的最后修改日期 -- 最近没有异常访问。

可能是我的服务器升级到 PHP 或他们的服务器配置,这可能导致这种中断,但我想检查并确保它不是别的东西。

感谢您对这个主题的任何见解/可读性 material。

... error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small

您感兴趣的错误编号是 OpenSSL 错误 0x14082174。

SSL3_CHECK_CERT_AND_ALGORITHM 通常在启用出口级密码时出现。由于僵局(见下文),它可能会再次出现在非出口级谈判中。


I'm assuming DH Key is too small is the main problem, but I have no idea what that means. I've googled Diffie–Hellman key exchange, along with the message "key too small" but I haven't had much luck.

这是由于最近 Logjam attack from the paper Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice

您应该使用 2048 位或更大的 Diffie-Hellman 组。您应该 而不是 使用 512 位或 1024 位 Diffie-Hellman 组。

首先要检查的是您的密码列表字符串。它应该类似于:

"HIGH:!aNULL:!MD5:!RC4"

它将避免使用出口级密码,而使用现代密码。但您还需要确保您的 DH 回调未使用 weak/small 字段大小。为此,您需要检查服务器配置。


有些人 "solving" 是 kRSA 的问题。 kRSA是密钥传输方案,不是密钥协议 方案。 RSA 密钥传输方案不提供前向保密,通常不鼓励使用它。事实上,它将从 TLS 1.3 中删除。

我只能说"usually discouraged"因为这取决于被保护的数据。如果你有 SSL/TLS 来保护公开可用文件的下载,那么它可能可以使用。如果您的网站有登录名,那么使用它可能会有一点风险,因为密码是机密数据(与可公开下载的文件不同)。

要避免密钥传输并通过那些 Qualsys SSL Labs 网络服务器配置和转发保密测试,请使用:

"HIGH:!aNULL:!kRSA:!MD5:!RC4"

在您的 Apache 配置文件中,它看起来像这样:

# cat /etc/httpd/conf.d/ssl.conf | grep SSLCipherSuite
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCipherSuite HIGH:!aNULL:!kRSA:!MD5:!RC4

我似乎记得 wget 在论文发表之前的一段时间里拒绝了小组。它可能会成为您网站的一个很好的测试用例。

还有一个改进的 sslscan,它可以测试很多东西。这也可能成为一个很好的 QA 工具。