Perl Webservice SSL协商失败

时间:2017-02-17 12:40:05

标签: perl ssl ssl-certificate

我正在尝试使用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);

有没有解决方案?

1 个答案:

答案 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是公开可访问的,那么发布它也有助于调试问题。