my $ua = LWP::UserAgent->new();
my $res = $ua->get("https://url");
print $res->content;
導致了迴應,該證書是無效的(如果我禁用主機名驗證服務器會說我需要加密代替),直到我開始使用Net::SSL
:Perl的LWP :: UserAgent的特定服務器上失敗的SSL
$ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS} = 'Net::SSL';
在做我的請求之前,ofc。
模塊版本此刻:
Crypt::SSLeay 0.58
IO::Socket::SSL 1.955
Net::SSLeay 1.55
LWP 6.05
LWP::Protocol::https 6.04
也嘗試了最新Crypt::SSLeay
但還是失敗了(在測試環境中嘗試這樣做)。
這僅僅是在客戶端和服務器之間的Crypt::SSLeay
庫中的限制 - 他們可能不同意加密方法?
我也使用OpenSSL
來手動連接到有問題的服務器,它工作沒有問題,沒有證書失敗等等。
我的問題已經解決了,但不是以一種非常優美的方式,但我很好奇錯誤在哪裏,因爲我花了很多時間尋找解決方案,並且問題的根源。我向其他成百上千個其他服務器發送SSL請求,但沒有這個問題,但是這臺服務器只會回覆一條消息,說我需要加密我的請求。
是否LWP
連同Net:SSL
更支持?
您將如何嘗試追蹤問題的根源?
編輯:一個有趣的事情是,這並沒有發生在舊版本的模塊(它最近工作)。我強烈懷疑這是LWP或更新的東西。怪異的行爲如何在更新中像這樣改變。
Net :: HTTP的版本?更新這個庫已經打破並且固定了很多安裝,取決於它是什麼版本。 – runrig
你是指你運行你的腳本的服務器,還是你請求URL的服務器? – runrig
Net :: HTTP 6.06,上面列出的版本位於我發送請求的服務器上。它曾經工作到同一臺服務器,但某些模塊更新了依賴關係(我認爲),然後停止工作。 – Gauntlet