Bin*_*ntz 2 perl ssl paypal lwp lwp-useragent
不是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.
Run Code Online (Sandbox Code Playgroud)
运行GET https://www.paypal.com从bash中(使用LWP)产生相同的错误消息.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)
Run Code Online (Sandbox Code Playgroud)
如果有其他相关模块,请告诉我.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
Run Code Online (Sandbox Code Playgroud)
链中的最后一个证书由1024证书签名
/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
Run Code Online (Sandbox Code Playgroud)
由于去年年底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存储,可以解决该问题.也可以看看:
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |