1

当尝试使用无效证书连接到测试 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?),但我从不IO::Socket::SSL直接引用;它只是SOAP::Lite链下某个地方的依赖。似乎我应该能够以某种方式将选项传递给它,但是我尝试过的所有方法似乎都不起作用。

值得注意的是,IO::Socket::SSL使用它的方法设置的默认值set_defaults并不能解决警告。

我如何将 SSL 选项传递给IO::Socket::SSL从 使用它的时间SOAP::Lite

4

1 回答 1

3

首先,设置IO::Socket::SSL的默认值不会消除警告,因为它用于查看是否需要打印警告的逻辑与它是否使用其默认值有关。

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

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

这最终告诉它使用提供的数组(哈希)引用调用该ssl_opts方法。(顺便说一句,相当于。)尽管我已经编写了它,但请注意参数是字符串标量、字符串标量和数组引用到字符串标量和数字标量。LWP::UserAgent0IO::Socket::SSL::SSL_VERIFY_NONEproxy

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

于 2013-12-21T00:02:28.817 回答