SSL例程:SSL23_WRITE:ssl握手失败

我正尝试使用OpenSSL连接到SSL服务器。

当我运行:

openssl s_client -connect myhost.com:443 

以下SSL客户端configuration工作得很好:

  • Windows( OpenSSL 0.9.83e 23 Feb 2007
  • Linux( OpenSSL 0.9.8o 01 Jun 2010
  • Linux( 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