当我从 Curl 向 Web 服务运行 get 请求时,出现错误SSL3_CHECK_CERT_AND_ALGORITHM: dh key too small
。服务器运行在 CentOS 6.6 上,Web 服务是在 Jetty 6 上运行的 Java 应用程序 (OpenJDK 1.7)。我知道 CentOS 6 已结束生命,我计划升级操作系统,但同时需要它运行。
还有另一台服务器也在 CentOS 6.6 上运行,具有相同的 Java 应用程序 (OpenJDK 1.7),也在 Jetty 6 上运行,但与其他站点集成时没有问题。
在检查命令的输出时openssl s_client -connect 127.0.0.1:443 -tls1_2
,我注意到两个系统使用的临时密钥和密码套件不同。不工作的系统正在使用 DH 密钥作为临时密钥,并且使用的密码套件是AES128-SHA
。而正在工作的系统正在使用ECDH
临时密钥,并且使用的密码套件是ECDH-RSA-AES128-SHA
。
运行时openssl ciphers -v
,两台服务器上的可用密码相同。由于某种原因,两个系统之间的临时密钥不同,并且在测试密码套件时,与另一个系统相比,只有少数在一个系统上有效:
Testing AES256-SHA256...YES
Testing AES256-SHA...YES
...
Testing AES128-SHA256...YES
Testing AES128-SHA...YES
...
Testing RC4-SHA...YES
Testing RC4-MD5...YES
Testing RC4-MD5...YES
有很多失败,包括在其他系统上运行的密码(ECDH-RSA-AES128-SHA)。
esting ECDH-RSA-AES128-GCM-SHA256...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-AES128-GCM-SHA256...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-AES128-SHA256...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-AES128-SHA256...NO (sslv3 alert handshake failure)
Testing ECDH-RSA-AES128-SHA...NO (sslv3 alert handshake failure)
Testing ECDH-ECDSA-AES128-SHA...NO (sslv3 alert handshake failure)
我比较了配置文件/etc/pki/tls/openssl.cnf
,但没有发现任何差异。如何让一台服务器使用与另一台服务器相同的临时密钥?