PayPal TLS 测试 URL - PHP curl SSL 协议错误

Posted

技术标签:

【中文标题】PayPal TLS 测试 URL - PHP curl SSL 协议错误【英文标题】:PayPal TLS Test URL - PHP curl SSL protocol error 【发布时间】:2016-05-04 17:21:49 【问题描述】:

我正在尝试针对新的 PayPal 测试端点进行测试:https://tlstest.paypal.com

请参阅此页面的最底部:TLS 1.2 and HTTP/1.1 Upgrade Microsite(验证您的...)。

我在 Windows Server 2008 R2 和 IIS 7.5 上使用 php (5.3.28) 和 curl (7.30.0 - OpenSSL/0.9.8y - libssh2/1.4.2):

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://tlstest.paypal.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // CURL_SSLVERSION_TLSv1_2
$result = curl_exec($ch);
echo 'result = '.$result.'<br>';
echo 'errno = '.curl_errno($ch).'<br>';
echo 'error = '.curl_error($ch).'<br>';
curl_close($ch);

我收到此错误:

35 连接到 tlstest.paypal.com:443 的未知 SSL 协议错误

我发现了这个:Github - Unknown SSL protocol error,其中有人说:

对于 TLS 1.2,Openssl 必须为 1.0.1 或更高版本。

这是正确的..?

我的 PHP OpenSSL 版本为:OpenSSL/0.9.8y(来自phpinfo())。

如果您确实需要 OpenSSL 1.0.1 或更高版本才能使用 TLS 1.2,那么大概 每台运行 PHP 且 OpenSSL 版本较低的服务器(我猜这很多!)将无法使用即将推出任何 PayPal API 或 PayPal IPN。

如何在 Windows 上更新我的 PHP OpenSSL 版本..?

【问题讨论】:

【参考方案1】:

我现在有这个工作。似乎 TLS 1.2 至少需要 OpenSSL/1.0.1i

我将我的 PHP 版本升级到 5.6.0,从而将 OpenSSL 升级到 1.0.1 版本。

我还需要这些:

    使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 验证证书。自 cURL 7.10 起,默认值为 true。 将 cacert.pem 从 http://curl.haxx.se/docs/caextract.html 保存到本地(在我的情况下保存到 c:\cert),然后更新您用来引用 cacert.pem as shown here 的 PHP ini。使用 ini 文件可以让您不必在每次调用中都使用 curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '\cacert.pem');

【讨论】:

升级到 PHP 5.6 后,在没有自己指定 SSL 版本的情况下,SSL 握手是否成功完成?你是否也更新了你的 curl 版本,还是还是 7.30? 我保留了 SSL 版本,所以不确定没有它是否可以工作,可能会尽快尝试... cURL 版本现在是 7.36.0,似乎与 PHP 5.6.0 一起提供。

以上是关于PayPal TLS 测试 URL - PHP curl SSL 协议错误的主要内容,如果未能解决你的问题,请参考以下文章

Express PayPal 结帐,无法创建 SSL/TLS 安全通道

PayPal,notify_url 从未执行过

PayPal IPN 沙盒 - 更改通知 URL 不会更新

如何配置paypal定期付款IPN url

发票 PayPal-PHP-SDK 中的 Paypal notify_url

在 PHP 中的 PayPal 中返回 URL