【发布时间】:2017-02-11 01:45:18
【问题描述】:
我在我们的一台服务器上遇到了握手问题。我似乎无法弄清楚如何解决这个问题。几天前,我在连接到我们的其他服务器之一时遇到了类似的问题,您可以在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 号警报。是不是意味着什么?? 服务器是否期望某种客户端证书用于握手?
【问题讨论】:
-
SSL alert number 40表示服务器不会接受连接,因为没有提供用户证书。您必须使用 -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 -
@ChankeyPathak:警报编号 40 是一般握手失败,可能是任何事情,包括缺少客户端证书。见RFC5246 (TLS 1.2) section A.3 Alert Messages。
-
请添加更多调试信息,即来自
openssl s_client -debug ..的输出、握手的数据包捕获(作为 pcap)或类似信息。当前信息还不够,因为 40 号警报只是一般的握手错误。 -
@ChankeyPathak 传递客户端证书和密钥似乎有效。我没有看到该错误,并且在调试消息结束时,openssl 正在等待我的输入。 (当我针对其他工作站点运行 openssl s_client 时,我看到了相同的行为)。
-
openssl 工作但我的脚本仍然失败并出现同样的错误。对我来说更多的调试。 :( 无论如何,谢谢你们!