我正在尝试使用ssl调用Web服务。它给出了以下错误:
500 SSL协商失败:
我搜索了论坛并应用了提供的方法,但没有一个有效。
我应用的2种方法如下:
1-)在通话前设置环境:
$ ENV {PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
2-)传递参数ssl_opts => [SSL_verify_mode => 0]代理:
my $soap = SOAP::Lite
-> on_action( .... )
-> uri($uri)
-> proxy($proxy, ssl_opts => [ SSL_verify_mode => 0 ])
-> ns("http://schemas.xmlsoap.org/soap/envelope/","soapenv")
-> ns("http://tempuri.org/","tem");
$soap->serializer()->encodingStyle(undef);
有没有解决方案?
答案 0 :(得分:3)
...同行在/usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi/Net /SSL.pm第145行重置连接
您正在运行一个非常旧版本的Perl(从2004年开始)以及旧版本的SSL库(即Crypt :: SSLeay而不是IO :: Socket :: SSL),我的猜测是这与使用非常旧版本的OpenSSL库来支持TLS。这种组合意味着不支持SNI,不支持TLS 1.2,也不支持ECDHE密码。许多现代服务器至少需要支持其中一项。但是connection reset by peer
也可能意味着某些防火墙阻止了连接,或者没有服务器监听您指定的端点。或者它可能意味着服务器期望您使用客户端证书进行授权。很难说但是通过连接的数据包捕获可能会提供更多信息。而且,如果URL是公开可访问的,那么发布它也有助于调试问题。