簡體   English   中英

為什么LWP無法與“ 500 SSL協商失敗”連接?

[英]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_successfalse,其中$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 :: SSLNet :: 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很好

您無需解釋$rowPOST調用的要求,但是看起來像這樣

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM