SSL 例程:SSL23_WRITE:ssl 握手失败

SSL 例程:SSL23_WRITE:ssl 握手失败

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

当我跑步时:

openssl s_client -connect myhost.com:443

以下 SSL 客户端配置可以正常工作:

  • 窗户(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:

我该如何继续解决这个问题?

非常感谢您的所有提示!

答案1

这看起来是 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

答案2

当旧版本的 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

答案3

如果您在 OpenJDK 上运行的 Java HTTPS 服务器遇到此问题,请尝试编辑/etc/java-7-openjdk/security/java.security并注释掉以下行

security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg

发现克里斯托弗·W

相关内容