我通过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或他们的服务器配置,这可能会导致这种情况,但我想检查并确保它不是别的。
感谢有关该主题的任何见解/可读材料。
答案 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工具。