PayPal SDK出现错误0x1408F10B:"SSL3_GET_RECORD:wrong version number"

33

看起来PayPal可能已经更新了其系统,以应对POODLE 攻击,导致使用PHP PayPal SDK的网站出现故障。

我遇到了以下错误:

PayPal/Exception/PPConnectionException: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

/var/www/site/vendor/paypal/sdk-core-php/lib/PayPal/Core/PPHttpConnection.php:91
/var/www/site/vendor/paypal/sdk-core-php/lib/PayPal/Core/PPAPIService.php:66
/var/www/site/vendor/paypal/sdk-core-php/lib/PayPal/Core/PPBaseService.php:82
/var/www/site/vendor/paypal/adaptivepayments-sdk-php/lib/PayPal/Service/AdaptivePaymentsService.php:97

您有什么推荐措施可以修复此问题,而不会影响安全性?


我在我的网站上短暂时间内遇到了同样的错误。但后来完全停止接收PayPal的IPN。你是否正在接收IPN?我们在我们这边改变的唯一一件事是禁用SSL v3。 - Jaffer
我们仍在接收IPN。也许您禁用了PayPal期望建立(安全?)连接的某些内容。我不知道PayPal的IPN服务支持哪些设置,但您可以联系他们的支持部门以获取详细信息。如果您学到了有趣的东西,请随时在这里分享。 - Arc
我们在 AWS 弹性负载均衡器后面。我们已禁用 SSL3。重新启用似乎没有帮助。您是否有类似的设置?您是否禁用了 SSL3?只是想确定禁用 SSL3 是否可能是问题的原因。 - Jaffer
1
PayPal的SDK Github页面上有相关链接。他们已经将您的更改合并到官方SDK中:https://github.com/paypal/rest-api-sdk-php/pull/127 - Jaffer
3个回答

33

更新: 正如Jaffer所指出的那样,PayPal的GitHub存储库已经合并了下面的更改,因此您可以更新您的SDK。

至少目前看起来是有效的,尽管我将不得不调查它实际使用的协议是什么。

\PayPal\Core\PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSLVERSION] = 1;
// 0 = default protocol (likely TLSv1), 1 = TLSv1; unsafe: 2 = SSLv2, 3 = SSLv3

对于直接使用 cURL 的其他用户,只需使用:

curl_setopt($handle, CURLOPT_SSLVERSION, 1);

更新:
刚查看了 cURL 的源代码,以下是数值(// 后为我的注释):

enum {  
    CURL_SSLVERSION_DEFAULT, // 0
    CURL_SSLVERSION_TLSv1,   // 1
    CURL_SSLVERSION_SSLv2,   // 2
    CURL_SSLVERSION_SSLv3,   // 3

    CURL_SSLVERSION_LAST /* never use, keep last */  // 4
};

总的来说,是的,1代表TLSv1,根据注释推测,它可能比4更好。
上面的代码已更新。


1
在rest-api的0.13版本中,将\PayPal\Core\PPHttpConfig::$defaultCurlOptions[CURLOPT_SSLVERSION] = 4;进行了编程。 - Daniele Cruciani
好的,谢谢。虽然我不知道 SSL 4 是什么,但目前这个解决方案也解决了我的问题。 - spezifanta
https://github.com/paypal/rest-api-sdk-php/releases/tag/v0.13.1 已经修复。其中1表示TLSv1,我也不太确定,我认为4就是指它倒在了1上面,因此是TLSv1,但并不确定。 - Daniele Cruciani
PP ipn从这里也突然停止了。尝试使用curl 4的解决方案。 - digiogi
通过将SSLVERSION更新为1,它指向TLSv1。如果您仍然遇到错误,请尝试添加CURLOPT_SSL_CIPHER_LIST => 'TLSv1',以解决问题。使用常量4的方法与较旧版本的curl库不兼容。有人可以验证一下吗? - Jay Patel - PayPal
显示剩余3条评论

2

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接