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

mar*_*nov 6 php ssl mysqli openssl codeigniter

我通过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
Run Code Online (Sandbox Code Playgroud)

我假设DH Key is too small是主要问题,但我不知道这意味着什么.我用Google搜索了Diffie-Hellman密钥交换,以及"密钥太小"的消息,但我没有太多运气.

这是服务器上的密钥被篡改的标志吗?我已经检查了它们的最后修改日期 - 没有异常的最近访问.

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

感谢您对该主题的任何见解/可读材料.

jww*_*jww 10

... error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small
Run Code Online (Sandbox Code Playgroud)

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

SSL3_CHECK_CERT_AND_ALGORITHM使出口级密码时,通常出现.由于Logjam,它可能会在非出口级别谈判中再次出现(见下文).


我假设DH Key太小是主要问题,但我不知道这意味着什么.我用Google搜索了Diffie-Hellman密钥交换,以及"密钥太小"的消息,但我没有太多运气.

这是由于最近Logjam的攻击来自文章" 不完美的前瞻性保密:Diffie-Hellman如何在实践中失败".

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

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

"HIGH:!aNULL:!MD5:!RC4"
Run Code Online (Sandbox Code Playgroud)

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


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

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

为避免密钥传输并通过Qualsys SSL Labs测试以进行Web服务器配置和转发保密,请使用:

"HIGH:!aNULL:!kRSA:!MD5:!RC4"
Run Code Online (Sandbox Code Playgroud)

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

# cat /etc/httpd/conf.d/ssl.conf | grep SSLCipherSuite
# SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCipherSuite HIGH:!aNULL:!kRSA:!MD5:!RC4
Run Code Online (Sandbox Code Playgroud)

wget在报纸发布之前的某段时间,我似乎回想起被拒绝的小团体.它可能会为您的网站提供一个很好的测试用例.

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