当尝试使用无效证书连接到测试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
?
答案 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
的参数可能是传递此数据的唯一方法,尽管有其他文档。