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

我正在通过SSL连接到我的数据库Google Cloud SQL。 我使用codeigniter 3.0来这样做,虽然mysqli驱动程序有点修改,以允许此function。

它已经运行好几个月了。 但是它刚刚开始返回这个警告:

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

这是否表示服务器上的密钥已被篡改? 我已经检查了最近修改的date – 没有exception的近期访问。

这可能是我的服务器做了一些升级到PHP或他们的服务器configuration,这可能会导致此打破,但我想检查,确保它不是别的。

感谢有关这个问题的任何见解/可读材料。

 ... 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攻击从不完善的前向保密:Diffie-Hellman如何在实践中失败 。

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

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

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

它将避免出口等级密码,并使用现代密码。 但是你也需要确保你的DHcallback没有使用弱/小的字段大小。 为此,您需要检查服务器configuration。


有些人正在用kRSA “解决”这个问题。 kRSA是一个关键的运输scheme,而不是一个关键的协议scheme。 RSA密钥传输scheme不提供前向保密,通常不鼓励使用。 事实上,它将从TLS 1.3中删除。

我只能说“通常不鼓励”,因为这取决于被保护的数据。 如果你有SSL / TLS来防止公众可用的文件的下载,那么它可能可以使用。 如果您的网站有一个login名,那么使用它可能有点冒险,因为密码是秘密数据(与公开下载的文件不同)。

为了避免密钥传输,并通过Qualsys SSL Labstestingnetworking服务器configuration和前向保密,请使用:

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

在你的Apacheconfiguration文件中,它看起来像这样:

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

我似乎记得wget在发表文章之前有一段时间拒绝了小团体。 这可能会为您的网站做一个好的testing案例。

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