2016-01-27 116 views
6

我正在尝试针对新的PayPal测试端点进行测试:https://tlstest.paypal.comPayPal TLS测试URL - PHP curl SSL协议错误

看到这个页面的最底部:TLS 1.2 and HTTP/1.1 Upgrade Microsite(验证你的...)。

我使用PHP(28年3月5日)和卷曲(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); 

我“M收到此错误:

35 Unknown SSL protocol error in connection to tlstest.paypal.com:443

我发现这一点:Github - Unknown SSL protocol error其中有人说:

Openssl must be at 1.0.1 or higher for TLS 1.2.

这是正确的..?

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

如果你确实需要的OpenSSL 1.0.1或更高版本才能使用TLS 1.2,则可能运行PHP以较小的OpenSSL的版本(我猜这是一个很大!)每个服务器将无法使用任何贝宝的API或即将推出PayPal IPN。

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

回答

1

我现在有这个工作。看起来TLS 1.2至少需要OpenSSL/1.0.1i

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

我还需要这些:

  1. 使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);来验证证书。默认值是true截至cURL 7.10。
  2. 保存cacert.pemhttp://curl.haxx.se/docs/caextract.html本地(在我的情况下为C:\证书),然后更新您使用引用cacert.pemas shown here的PHP INI。使用ini文件可以节省您在每次调用时都必须使用curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '\cacert.pem');
+0

升级到PHP 5.6后,SSL握手是否成功完成,而没有自己指定SSL版本?你是否更新了卷曲版本,或者仍然是7.30? –

+0

我离开了SSL版本,所以不确定它是否能正常工作,可能会尽快... cURL verson现在是7.36.0,这似乎与PHP 5.6.0。 –