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

时间:2015-06-08 04:47:45

标签: php codeigniter ssl mysqli openssl

我通过SSL连接到我的数据库Google Cloud SQL。虽然mysqli驱动程序有点修改以允许此功能,但我使用codeigniter 3.0来执行此操作。

它已经好几个月了。但是只是开始返回此警告:

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密钥交换,以及消息"密钥太小"但我没有多少运气。

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

可能是我的服务器做了一些升级到PHP或他们的服务器配置,这可能会导致这种情况,但我想检查并确保它不是别的。

感谢有关该主题的任何见解/可读材料。

1 个答案:

答案 0 :(得分:10)

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

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

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

  

我认为DH Key太小是主要问题,但我不知道这意味着什么。我用谷歌搜索了Diffie-Hellman密钥交换,以及消息"密钥太小"但我没有多少运气。

由于论文Logjam attack中最近Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice的原因。

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

要检查的第一件事是你的密码列表字符串。它应该类似于:

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

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

有些人正在解决" kRSA的问题。 kRSA是关键的 传输 方案,而不是关键的 协议 方案。 RSA密钥传输方案不提供前向保密,并且通常不鼓励使用它。实际上,它将从TLS 1.3中删除。

我只能说"通常不鼓励" 因为它取决于受保护的数据。如果你有SSL / TLS来保护公共文件的下载,那么它可能可以使用。如果您的网站有登录名,那么使用它可能有点风险,因为密码是秘密数据(与可公开下载的文件不同)。

为了避免密钥传输并将这些Qualsys SSL Labs测试传递给Web服务器配置并提前保密,请使用:

"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工具。

相关问题