[英]Why does LWP fail to connect with “500 SSL negotiation failed”?
我的Perl腳本將一些信息發送到遠程服務器。
以下是部分代碼
#!/var/hvmail/libexec/perl
use strict;
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use constant HANDLER_URL => "https://www.website.com/handler.php";
$ENV{HTTPS_DEBUG} = 1;
my $ua = LWP::UserAgent->new;
# Some DB stuff, not applicable
my $row; # This is a DB row ($sth->fetchrow_hashref())
my $req = POST ''.HANDLER_URL, [ %$row ];
my $res = $ua->request($req);
$res->is_success
為false,其中$res->status_line
為
500 SSL negotiation failed
我們正在運行CentOS 6.4,Perl 5.10.1,OpenSSL 1.0.1e-fips。
這是完整的輸出:
SSL_connect:before/connect initialization
SSL_connect:SSLv2/v3 write client hello A
SSL3 alert read:fatal:handshake failure
SSL_connect:error in SSLv2/v3 read server hello A
SSL_connect:before/connect initialization
SSL_connect:SSLv3 write client hello A
SSL3 alert read:fatal:handshake failure
SSL_connect:failed in SSLv3 read server hello A
SSL_connect:before/connect initialization
SSL_connect:SSLv2 write client hello A
SSL_connect:failed in SSLv2 read server hello A
Error: [ 500 SSL negotiation failed: ]
Can't locate Net/SSLeay.pm
Can't locate LWP/Protocol/https.pm
您似乎依賴Crypt :: SSLeay 。 你不應該 它已經過時且不完整。
安裝最新的LWP :: Protocol :: https ,它將升級您的LWP並安裝由IO :: Socket :: SSL和Net :: SSLeay組成的首選SSL / TLS堆棧。
網上搜索顯示存在帶有LWP::Protocol::https
RPM軟件包的CentOS6存儲庫。
服務器已禁用SSLv3支持,這意味着協商失敗。
安裝軟件包后,如果仍然看到相同的錯誤,請確保您的腳本沒有強制使用Crypt::SSLeay
。 也就是說,請確保以下所有內容均未出現在腳本中:
use Net::HTTPS;
$Net::HTTPS::SSL_SOCKET_CLASS = 'Net::SSL';
要么
local $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
要么
use Net::SSL;
如果仍然遇到問題,請確保腳本的運行時環境中沒有PERL_NET_HTTPS_SSL_SOCKET_CLASS
環境變量。
另外,嘗試
$ /var/hvmail/libexec/perl -MNet::SSLeay -le 'print $Net::SSLeay::VERSION'
和
$ /var/hvmail/libexec/perl -MLWP::Protocol::https -le 'print $LWP::Protocol::https::VERSION`'
並報告輸出。
我懷疑問題在於為系統的perl
安裝了新軟件包,而您似乎有一個單獨的perl
。
在這種情況下,您應該使用/var/hvmail/libexec/perl
分別安裝每個軟件包。 例如:
$ curl -O https://cpan.metacpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7043.tar.gz
$ tar xvf App-cpanminus-1.7043.tar.gz
$ cd App-cpanminus-1.7043
$ /var/hvmail/libexec/perl Makefile.PL
$ make install
找出cpanm
安裝位置。 我希望/var/hvmail/libexec
。
$ /var/hvmail/libexec/cpanm LWP::Protocol::https
另請參閱更新所有過時的Perl模塊 ,但這可能會對生產產生風險。 不過,安裝App :: cpanoutdated並查看Perl模塊的過時程度可能會很有用。
現在,請記住,像這樣修改生產安裝是有風險的。 確保您有一種方法來撤消更改,以防出現問題。
最后,請注意, 不再支持OpenSSL 1.0.1版本 :
關於當前和將來的版本,OpenSSL項目已采用以下策略:
- 在2018年8月31日之前,將支持1.1.0版。
- 在2019年12月31日之前,將支持1.0.2版。
- 不再支持1.0.1版。
- 不再支持1.0.0版。
- 不再支持0.9.8版。
不需要''.HANDLER_URL
。 看起來很丑, HANDLER_URL
很好
您無需解釋$row
或POST
調用的要求,但是看起來像這樣
my $req = POST ''.HANDLER_URL, [ %$row ];
my $res = $ua->request($req);
應該
my $res = $ua->post(HANDLER_URL, $row);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.