Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl SSL握手错误_Perl_Ssl_Https_Openssl - Fatal编程技术网

Perl SSL握手错误

Perl SSL握手错误,perl,ssl,https,openssl,Perl,Ssl,Https,Openssl,我的一台服务器出现了握手问题。我似乎不知道如何解决这个问题。几天前,我在连接到我们的另一台服务器时遇到了类似的问题,您可以关注这个问题。这个问题已经解决了,但我还面临着一个类似的问题 这来自错误日志 DEBUG: .../IO/Socket/SSL.pm:415: connection failed - connect returned 0 DEBUG: .../IO/Socket/SSL.pm:1175: SSL connect attempt failed because of handsh

我的一台服务器出现了握手问题。我似乎不知道如何解决这个问题。几天前,我在连接到我们的另一台服务器时遇到了类似的问题,您可以关注这个问题。这个问题已经解决了,但我还面临着一个类似的问题

这来自错误日志

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号警报。这意味着什么吗??
服务器是否需要用于握手的某种客户端证书?

您必须使用
-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

说到为什么我的剧本特别失败,我找到了原因

在回答这个问题之前,我会让我的环境有一个上下文

  • Perl:5.10.1(由perlbrew管理的自定义Perl)。因此,我没有使用系统perl默认附带的模块
  • cpanm管理的模块
  • 在Ubuntu 14.04上运行
  • 我通过安装Crypt::SSLeay模块解决了这个问题。显然,LWP模块不支持没有此模块的https

    我发现这可能是在IO::Socket::SSL模块中启用调试

    use IO::Socket qw(debug4);
    
    它可能会在将来帮助某人:)


    编辑:对于某些SSL连接,我的脚本仍然失败。根据线程来看,openssl版本似乎是罪魁祸首

    SSL警报编号40
    表示服务器不会接受连接,因为没有提供用户证书。您必须使用-cert和-key参数指定用户证书和私钥。请尝试
    openssl s_client-port 443-CApath/usr/share/ssl/certs/-host$host-prexit-cert-your.client.cert.cert-key-your.private.key.key
    @ChankeyPathak:40号警报是一种常见的握手失败,可能包括丢失的客户端证书。请参阅。请添加更多调试信息,即来自
    openssl s_客户端-debug..
    的输出、握手的数据包捕获(作为pcap)或类似信息。目前的信息还不够,因为40号警报只是一个普通的握手错误。@ChankeyPathak传递客户端证书和密钥似乎有效。我没有看到那个错误,在调试消息的末尾,openssl正在等待我的输入。(我在其他工作站点上运行openssl s_客户端时看到了相同的行为)。openssl工作正常,但我的脚本仍然失败,出现了相同的错误。为我做更多调试:(无论如何,谢谢大家!你们可以接受自己的答案。参见