[英]Perl, LWP “certificate verify failed” with paypal.com
不是100%肯定這是一個Perl問題,但似乎是。 我有一個與PayPal連接的IPN腳本來驗證交易。 它工作正常,直到昨天,我安裝了LWP :: Protocol :: https。 從那時起,它一直沒有出現錯誤:
Can't connect to www.paypal.com:443 (certificate verify failed)
LWP::Protocol::https::Socket: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed at /usr/local/share/perl5/LWP/Protocol/http.pm line 47.
從bash(使用LWP)運行GET https://www.paypal.com
產生相同的錯誤消息。 OTOH,運行GET https://www.gmail.com
是成功的。 運行openssl s_client -host paypal.com -port 443
返回(除其他外) Verify return code: 0 (ok)
。 curl "https://www.paypal.com/cgi-bin/webscr?cmd=_notify-validate"
成功收到PayPal的回復。 所以它似乎確實是Perl特有的。
模塊版本:
LWP 6.13
LWP::Protocol::https 6.06
IO::Socket::SSL 2.015
Mozilla::CA 20141217 (note: I've tried the script both using Mozilla::CA and without it... results have been the same)
如果有其他相關模塊,請告訴我。 Perl版本是5.10.1。 服務器操作系統是RHEL 6。
Mozilla :: CA 20141217(注意:我已經嘗試過使用Mozilla :: CA而沒有它的腳本......結果是一樣的)
簡而言之:我不知道“沒有它”對於RHEL6意味着什么,但請再次嘗試使用Mozilla :: CA 20130114或使用http://curl.haxx.se/docs/caextract鏈接的“舊版ca-bundle” .html 。
詳細信息:您從www.paypal.com獲得的證書鏈
[0] www.paypal.com
[1] Symantec Class 3 EV SSL CA - G2
[2] VeriSign Class 3 Public Primary Certification Authority - G5
鏈中的最后一個證書由1024證書簽名
/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
由於去年年底Mozilla刪除了1024位證書,因此您不會再在當前的Mozilla :: CA中找到它們。 但瀏覽器不需要舊證書,因為基於證書[0]和[1]創建信任鏈已經因為它們使用內置證書而不是服務器發送的證書[2]。
雖然這個較新的內置證書也包含在Mozilla :: CA中,但由於OpenSSL如何驗證證書存在長期存在的錯誤,因此它將不會被使用:它將始終嘗試驗證最長的鏈,而不是檢查較短的鏈是否是可能。
有關此問題的詳細信息,請參閱
這個問題可以通過使用OpenSSL 1.02(4個月前發布,可能還沒有在RHEL中)引入的標志X509_V_FLAG_TRUSTED_FIRST解決,或者使用更新的尚未發布的OpenSSL版本來解決問題(參見https) ://rt.openssl.org/Ticket/Display.html?id = 3637&user = guest&pass = guest )。
通過使舊的1024位CA證書仍然可用,即使用較舊的Mozilla :: CA或CA捆綁包或使用通常包括這些舊CA的系統CA存儲,可以解決該問題。 也可以看看:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.