2013-12-21 38 views
0

當試圖使用無效證書連接到測試SSL SOAP服務器,Perl是打印出的文本這個龐大的大塊:如何通過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的鏈條。看起來我應該能夠以某種方式將選項傳遞給它,但是我嘗試過的所有東西似乎都不起作用。

值得注意的是,使用set_defaults方法設置IO::Socket::SSL的默認值不能解決警告。

如何從SOAP::Lite使用SSL選項至IO::Socket::SSL

回答

1

首先,設置IO::Socket::SSL的默認值不會擺脫警告,因爲它用於查看是否需要打印警告的邏輯與是否使用其默認值有關。

我終於發現,在Perl調試了很多時間之後,這個調用將工作:

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

這最終會告訴它提供的數組(不是召ssl_opts方法LWP::UserAgent散列)參考。 (順便說一句,0相當於IO::Socket::SSL::SSL_VERIFY_NONE。)儘管我已經寫了它,但請注意proxy的參數是字符串標量,字符串標量和array-ref字符串標量和數字標量。

儘管有其他文檔,但使用參數proxy可能是傳遞此數據的唯一方法。