PayPal最近的TLS 1.2 / HTTP 1.1更新以及何时使用它

时间:2018-07-14 10:55:45

标签: php ssl curl paypal paypal-ipn

关于贝宝(Paypal)最近的security update,我已经开始在我的cURL代码中添加两个附加选项,分别是:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);

我设置了CURLOPT_HTTP_VERSION,因为未设置它似乎默认为“ 让CURL决定使用哪个版本”-我不想或不想对设置进行硬编码以实现将来的兼容性原因,如果有支持,可以信任cURL始终设置HTTP 1.1吗?

第二,我将CURLOPT_SSLVERSION设置为6的{​​{1}},因为我已经读过。.

  

某些环境可能支持TLS 1.2,但不在默认列表中,因此需要设置SSL版本选项。

现在,我注意到在该PayPal链接上有一个附加查询,它仅提及端点,但是当您向其其他URL发出CURL_SSLVERSION_TLSv1_2请求时又如何呢?诸如IPN侦听器之类的东西?仍然需要TLS 1.2和HTTP 1.1吗?

2 个答案:

答案 0 :(得分:2)

www.paypal.com使用HTTP / 2,如

所示
curl --silent --head https://www.paypal.com | head -n 1
HTTP/2 302

根据official docs,您最好的选择是

  

CURL_HTTP_VERSION_2_0

     

尝试HTTP 2请求。如果无法与服务器协商HTTP 2,则libcurl将回退到HTTP 1.1。

如果无法使用HTTP / 2,

cURL将回退到所需的HTTP / 1.1。

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);

此选项可能更好

  

CURL_HTTP_VERSION_2TLS

     

仅尝试通过TLS(HTTPS)进行HTTP 2。如果无法与HTTPS服务器协商HTTP 2,则libcurl将回退到HTTP 1.1。对于明文HTTP服务器,libcurl将使用1.1。 (在7.47.0中添加)

对于php cURL extension docs

  

CURL_HTTP_VERSION_2(整数)       自PHP 7.0.7和cURL 7.43.0起可用   CURL_HTTP_VERSION_2TLS(整数)       自PHP 7.0.7和cURL 7.47.0起可用

如果您的PHP版本未定义这些常量,则可以尝试类似

defined('CURL_HTTP_VERSION_2_0') || define('CURL_HTTP_VERSION_2_0', 65536);

对于CURL_HTTP_VERSION_2TLS,该值似乎是

CURL_HTTP_VERSION_2TLS = 4

只要libcurl支持包版本支持整数值,就可以使用整数值代替PHP常量。

在基于rpm的Linux上,您可以使用

进行检查
rpm -q libcurl4
libcurl4-7.60.0-lp150.2.6.1.x86_64

与PHP(命令行)相比

php -r 'phpinfo();' | grep -i 'curl info'
cURL Information => 7.60.0

也可以

php -r 'print_r(curl_version());' | grep 'version'
[version_number] => 474112
[ssl_version_number] => 0
[version] => 7.60.0
[ssl_version] => OpenSSL/1.1.0h
[libz_version] => 1.2.11

答案 1 :(得分:2)

也许进一步兼容的最佳和最简单方法就是尝试使您的库(主要是curlopenssl(请检查nghttp)保持最新,这可能有助于防止添加一些常量,通过使用定义的“默认值”,一切应该可以正常工作。

从文档中:https://ec.haxx.se/http-versions.html

  

自2016年中以来,curl将默认使用HTTP / 1.1作为HTTP服务器。如果您连接到HTTPS,并且您的libcurl内置了HTTP / 2功能,则curl将尝试自动使用HTTP / 2或在协商失败的情况下降至1.1。默认情况下,不支持HTTP / 2的curl在HTTPS上获得1.1。