代码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工具。