如何在Perl中将SSL选项传递给SOAP :: Lite

时间:2013-12-21 00:02:29

标签: perl soap ssl soaplite

当尝试使用无效证书连接到测试SSL SOAP服务器时,Perl正在打印出这一大块文本:

*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 together with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************

事实证明这是来自IO::Socket::SSL (这将是一个很好的细节,包含在警告文本中,donchathink?),但我从来没有引用{{1直接地它只是链中某个地方IO::Socket::SSL的依赖关系。看起来我应该能够以某种方式将选项传递给它,但我尝试过的所有东西似乎都没有用。

值得注意的是,使用SOAP::Lite方法设置IO::Socket::SSL的默认设置无法解决警告问题。

如何在set_defaults使用SSL选项时将其传递给IO::Socket::SSL

1 个答案:

答案 0 :(得分:2)

首先,设置IO::Socket::SSL的默认值并没有消除警告,因为它用来查看是否需要打印警告的逻辑与它是否使用默认值有关。 / p>

在Perl调试器中经过大量时间后,我终于发现这个调用可以正常工作:

$soap = SOAP::Lite->proxy("https://example.com:443/soapuri", ssl_opts => [ SSL_verify_mode => 0 ] );

这最终告诉它使用提供的数组( NOT 哈希)引用调用ssl_opts中的LWP::UserAgent方法。 (顺便说一下,0相当于IO::Socket::SSL::SSL_VERIFY_NONE。)尽管我编写了它,但请注意proxy的参数是字符串标量,字符串标量和数组引用字符串标量和数字标量。

使用proxy的参数可能是传递此数据的唯一方法,尽管有其他文档。