首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl,LWP使用paypal.com进行“证书验证失败”

Perl,LWP使用paypal.com进行“证书验证失败”
EN

Stack Overflow用户
提问于 2015-05-31 05:35:24
回答 1查看 2.3K关注 0票数 2

不能100%确定这是Perl问题,但似乎是这样。我有一个与PayPal连接的IPN脚本来验证事务。直到昨天,我才安装了LWP::Protocol::https。从那时起,它一直失败,错误:

代码语言:javascript
运行
复制
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会产生相同的错误消息。运行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的。

模块版本:

代码语言:javascript
运行
复制
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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-31 06:27:10

Mozilla::CA 20141217 (注:我已经尝试了使用Mozilla::CA的脚本,但是没有它.结果是一样的)

简而言之:我不知道“没有它”对RHEL6意味着什么,但是请再次尝试使用Mozilla::CA 20130114或从http://curl.haxx.se/docs/caextract.html链接的“旧ca包”。

详细信息:从www.paypal.com获得的证书链

代码语言:javascript
运行
复制
[0] www.paypal.com
[1] Symantec Class 3 EV SSL CA - G2
[2] VeriSign Class 3 Public Primary Certification Authority - G5

链中的最后一个证书由1024证书签名。

代码语言:javascript
运行
复制
/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority

自去年年底被Mozilla删除的1024位证书以来,您将不再在当前的Mozilla::CA中找到它们。但是浏览器不需要旧证书,因为创建基于证书的信任链,而1已经使用内置证书,而不是服务器发送的证书2。

虽然这个较新的内置证书也包含在Mozilla::CA中,但由于OpenSSL验证证书的方式中存在一个长期存在的错误,它将不会被使用:它将始终尝试验证最长的链,而不检查是否可能使用更短的链。

有关此问题的详细信息,请参阅

这个问题可以通过使用标志X509_V_FLAG_TRUSTED_FIRST来解决,标志OpenSSL 1.02 (4个月前发布,可能还没有在RHEL中发布),或者使用一个更新、还没有发布的OpenSSL版本来解决这个问题(参见https://rt.openssl.org/Ticket/Display.html?id=3637&user=guest&pass=guest)。

解决这个问题的方法是仍然可以使用旧的1024位CA证书,即要么使用旧的Mozilla::CA或CA包,要么使用通常包含这些旧CA的系统CA存储。另请参阅:

  • 针对IO::Socket::SSL的当前错误报告默认使用X509_V_FLAG_TRUSTED_FIRST (如果可用的话)。此标志设置为2.016 (尚未发布),但需要一个Net::SSLeay版本,该版本导出此标志(尚未发布)和OpenSSL 1.02 (未包含在该标记中)。
  • 在系统上使用默认CA的针对LWP的请求,而不是Mozilla::CA。这可能也会为你省下这个问题。请注意,Debian/Ubuntu包含了类似的修补程序。我不知道与RHEL一起装运的LWP版本。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30554222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档