【问题标题】:OpenSSL connection error SSL23_GET_SERVER_HELLO, but browser and curl worksOpenSSL 连接错误 SSL23_GET_SERVER_HELLO,但浏览器和 curl 有效
【发布时间】:2016-03-15 06:21:11
【问题描述】:

我正在处理一个问题,即由于 openssl 无法完成握手,python 无法通过 ssl 连接到特定服务器。卷曲和我的浏览器工作。我尝试了几个不同的 openssl 版本和solutions,但似乎无法连接。

这是我在以下两个平台上尝试过的。在 OpenSSL 1.0.1e 上打印的输出略有不同,但仍然是相同的错误。

Mac OSX Yosemite - OpenSSL 0.9.8zg 14 July 2015
Debian GNU/Linux 7 (wheezy) - OpenSSL 1.0.1e 11 Feb 2013

不指定哪个版本

openssl s_client -connect www.uk-recruitment.net:443
openssl s_client -connect www.uk-recruitment.net:443 -cipher 'DEFAULT:!ECDH'
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH'
openssl s_client -connect www.uk-recruitment.net:443 -CAfile cacert.pem -cipher 'DEFAULT:!ECDH' -servername uk-recruitment.net

但我总是得到相同的结果

CONNECTED(00000003)
66716:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s23_clnt.c:593: 

如果我使用所有相同的选项添加-tls1-tls1_1-tls1_2,我会得到一个稍微不同的错误:

openssl s_client -connect www.uk-recruitment.net:443 -tls1
CONNECTED(00000003)
66750:error:14094438:SSL routines:SSL3_READ_BYTES:tlsv1 alert internal error:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s3_pkt.c:1145:SSL alert number 80
66750:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-52.40.1/src/ssl/s3_pkt.c:566:

【问题讨论】:

标签: ssl openssl


【解决方案1】:

站点需要Server Name Indication (SNI),不使用 SNI 的 SSL 握手会导致失败:

$ openssl s_client -connect www.uk-recruitment.net:443
CONNECTED(00000003)
139999237719712:error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error:s23_clnt.c:770:

使用 SNI 看起来会更好:

$ openssl s_client -connect www.uk-recruitment.net:443 -servername www.uk-recruitment.net
CONNECTED(00000003)
...
   Cipher    : ECDHE-ECDSA-AES128-GCM-SHA256

-servername 选项可能不适用于 OpenSSL 0.9.8,但它应该适用于 OpenSSL 1.0.1。

【讨论】:

  • 谢谢,该标志在 0.9.8 上显示为可用,但仍然给出相同的错误(有 www 前缀和没有)所以我认为它不是修复。尝试 1.0.1 有效。
  • 每个 ssllabs 他们在 cloudflare 上并且需要 SNI、最低 TLSv1.0、和 ECDHE-ECDSA 密钥交换,并且测试表明他们还需要“新型”Hello(不是SSLv2 兼容),这是 0.9.8 的默认设置。 1.0.0 和 -servername 可以工作,但 1.0.1 或 1.0.2 更好,因为它们实现了 TLSv1.2 和 GCM。 0.9.8 可以使用-tls1 -ciphers ECCdraft:HIGH:!aNULL -servername 工作,但这变得很繁琐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多