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

6

我正在尝试测试一个新的PayPal测试端点:https://tlstest.paypal.com

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

我正在使用PHP(5.3.28)和curl(7.30.0-OpenSSL / 0.9.8y-libssh2 / 1.4.2)在Windows Server 2008 R2和IIS 7.5上进行操作:

$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 - 未知 SSL 协议错误 ,其中有人说:

TLS 1.2 要求 OpenSSL 必须在 1.0.1 或更高版本。

这是正确的吗?

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

如果确实需要 OpenSSL 1.0.1 或更高版本才能使用 TLS 1.2,那么预计所有安装了低版本 OpenSSL 的运行 PHP 的服务器(我猜可能会有很多!)将无法使用任何 PayPal API 或 PayPal IPN。

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

1个回答

1

我现在已经解决了这个问题。看起来至少需要OpenSSL/1.0.1i才能支持TLS 1.2。

我将PHP版本升级到了5.6.0,这也将OpenSSL升级到了1.0.1版本。

我还需要以下内容:

  1. 使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);来验证证书。默认值为cURL 7.10以上的版本是true
  2. http://curl.haxx.se/docs/caextract.html下载cacert.pem文件到本地(例如我的路径是c:\cert),然后更新您正在使用的PHP ini文件以引用cacert.pem如此显示。使用ini文件可以避免在每次调用中使用curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '\cacert.pem');

在升级到PHP 5.6之后,您是否成功完成了SSL握手而无需自己指定SSL版本?您是否也更新了curl版本,还是仍然是7.30? - Matt O
我保留了 SSL 版本,所以不确定没有它是否可以正常工作,可能会很快尝试一下... cURL 版本现在是 7.36.0,似乎随附着 PHP 5.6.0。 - Stephen Last

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