我正尝试使用OpenSSL连接到SSL服务器。
当我运行:
openssl s_client -connect myhost.com:443
以下SSL客户端configuration工作得很好:
OpenSSL 0.9.83e 23 Feb 2007
) OpenSSL 0.9.8o 01 Jun 2010
) OpenSSL 1.0.0-fips 29 Mar 2010
) 任何成功连接的输出如下所示:
New, TLSv1/SSLv3, Cipher is DES-CBC3-SHA Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DES-CBC3-SHA Session-ID: (hidden) Session-ID-ctx: Master-Key: (hidden) Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None Start Time: 1337266099 Timeout : 300 (sec) Verify return code: 0 (ok)
但是,当我使用客户端与我的Ubuntu 12.04(w / OpenSSL 1.0.1 14 Mar 2012
),我得到错误:
CONNECTED(00000003) ...:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:177:
我怎样才能解决这个问题?
所有的提示都非常感谢!
这看起来是Ubuntu 1.0.1 OpenSSL的一个已知问题: https : //bugs.launchpad.net/ubuntu/+source/openssl/+bug/965371
它看起来不像是可用的修复程序。 如果可能,你可以降级到1.0.0。
尝试openssl s_client -tls1 -connect myhost.com:443
如果在OpenJDK上运行的Java HTTPS服务器出现此问题,请尝试编辑/etc/java-7-openjdk/security/java.security
并注释掉该行
security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg
正如Christoph W发现的那样。
当它不能重新协商密码(我使用椭圆曲线生成一个自签名证书)时,这个错误可能是由较旧版本的openssl引起的。
具体来说,我得到了与默认openssl – 0.9.8zh MacOS相同的错误
在安装brew版本OpenSSL 1.0.2f之后,错误消失了:
~/bin/openssl s_client -connect localhost:45678 | grep Cipher verify return:1 New, TLSv1/SSLv3, Cipher is ECDHE-ECDSA-AES256-GCM-SHA384 Cipher : ECDHE-ECDSA-AES256-GCM-SHA384