SSL握手错误

时间:2016-10-03 07:03:50

标签: perl ssl https openssl

我正在与我们的一台服务器发生握手问题。我似乎无法弄清楚如何解决这个问题。几天前,我在连接到其他服务器时遇到了类似问题,您可以在this问题中查看。这个问题已经解决,但我面临着一个类似的问题。

这是来自错误日志。

DEBUG: .../IO/Socket/SSL.pm:415: connection failed - connect returned 0
DEBUG: .../IO/Socket/SSL.pm:1175: SSL connect attempt failed because of handshake problemserror:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

我也运行了一个openssl命令,这里是输出。

-> openssl s_client -connect ABC:443 -CApath XXX
CONNECTED(00000003)
...
31507:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1101:SSL alert number 40
31507:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:

我在那里看到警报号码40。它是否意味着什么? 服务器是否期望握手的某种客户端证书?

2 个答案:

答案 0 :(得分:1)

您必须使用-cert-key参数指定用户证书和私钥。

openssl s_client -port 443 -CApath /usr/share/ssl/certs/ -host $host -prexit -cert your.client.certificate.cert -key your.private.key.key

答案 1 :(得分:1)

为什么它在我的剧本中特别失败,我找到了它的原因。

在回答之前,我将征集我的环境以获得上下文

  
      
  1. Perl:5.10.1(由perlbrew管理的自定义perl)。所以我没有使用系统perl默认出现的模块。
  2.   
  3. 由cpanm管理的模块
  4.   
  5. 在Ubuntu 14.04上运行
  6.   

我通过安装Crypt :: SSLeay模块解决了这个问题。显然LWP模块不支持没有此模块的https。

我认为这可以在IO :: Socket :: SSL模块中启用调试。

use IO::Socket qw(debug4);

将来可能对某人有所帮助:)

编辑:我的脚本仍然无法进行某些SSL连接。看起来openssl版本是根据线程here

的罪魁祸首