我正在尝试使用 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:
我该如何继续解决这个问题?
非常感谢所有提示!
这看起来是 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
此错误可能是由于旧版本的 openssl 无法重新协商密码而导致的(我使用椭圆曲线生成了自签名证书)。
具体来说,我在使用默认 openssl - 0.9.8zh 的 MacOS 上遇到了同样的错误
安装 brew 版本 OpenSSL 1.0.2f 后,错误消失了:
如果在 OpenJDK 上运行的 Java HTTPS 服务器遇到此问题,请尝试编辑
/etc/java-7-openjdk/security/java.security
并注释掉该行正如Christoph W所发现的那样。