我的PayPal脚本突然停止验证 SSL 证书


My PayPal script suddenly stopped verifying the SSL certificate

所以我的脚本(IPN 侦听器、API 调用等)工作正常,但突然开始抛出关于无法验证 SSL 证书的错误。这是我的错误(显示 PHP CURL)

SSL 连接错误

为什么它停止工作?

去年,PCI-DSS 3.1问世,所有处理信用卡的人都发生了重大变化。具体而言,要求所有处理都必须仅在TLS 1.1或更高版本上完成。最初的日落日期是2016年6月30日,但被推迟到2018年6月30

支付卡行业安全标准委员会 (PCI SSC) 将迁移完成日期延长至 2018 年 6 月 30 日,以便从 SSL 和 TLS 1.0 过渡到安全版本的 TLS(当前为 v1.1 或更高版本)。

现在,虽然这种缓和给了你,程序员,一些关于你的前端的喘息空间,但它仍然意味着迁移到TLS 1.1+不是可选的(事实上,如果我是你,我会更早地移动),并且一些中间卡处理将比这更早开始移动。事实证明,PayPal是其网站方面的举措之一

TLS 1.2 升级

目前在 Web 上共享信息的最安全协议是传输层安全性 (TLS) 版本 1.2。PayPal正在为所有安全连接启用对TLS 1.2的支持,并将在2016年开始要求使用它。您需要验证您的环境是否支持 TLS 1.2,并在必要时进行适当的更新。PayPal将于 2016 年 6 月 17 日更新其服务,要求所有 HTTPS 连接使用 TLS v1.2。在此日期之后,将拒绝所有 TLS v1.0 和 TLS v1.1 API 连接。

现在,从理论上讲,您的旧脚本(前提是您不存储PayPal的公钥)应该运行良好,但沙盒(已经移动到此)通信已经开始失败。我发现,由于各种原因,一些通信层(特别是PHP中的CURL,一种非常常见的与PayPal交谈的方式)无法再与PayPal进行适当的协商。因此,你会得到神秘的错误

SSL 连接错误

谢谢卷曲。这很有帮助...(不是)

那么我们如何解决这个问题呢?好吧,如果我们告诉 CURL 只使用 TLS 1.2,那么您对PayPal的调用应该重新开始工作而不会出现问题。如果你使用的是PHP和CURURL,你可以通过添加这个来做到这一点,比如(其中$ch是你的CURL处理程序)

curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2

此更改对于沙盒和实时调用PayPal都是完全安全的。