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

Bre*_*ett 6 php ssl curl paypal paypal-ipn

关于Paypal最近的安全更新,我已经开始在我的cURL代码中添加两个附加选项,即:

curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
Run Code Online (Sandbox Code Playgroud)

我设置CURLOPT_HTTP_VERSION因为不设置它似乎默认为" 让CURL决定使用哪个版本 " -虽然我不想还是喜欢硬编码为未来的兼容性原因的设置,可卷曲被信任总是设置HTTP 1.1是否支持?

其次,我设置CURLOPT_SSLVERSION6,这是CURL_SSLVERSION_TLSv1_2因为我读了..

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

现在,我注意到在PayPal链接上只有一个额外的查询,它只提到了端点,但是当你cURL向其他URL 发出请求时,如同常见的那样:https://www.paypal.com/cgi-bin/webscr用于IPN监听器之类的东西?这仍然需要TLS 1.2和HTTP 1.1吗?

Lui*_*ñoz 2

www.paypal.com 使用 HTTP/2,如下所示

curl --silent --head https://www.paypal.com | head -n 1
HTTP/2 302
Run Code Online (Sandbox Code Playgroud)

根据官方文档,你最好的选择是

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);
Run Code Online (Sandbox Code Playgroud)

这个选项可能会更好

CURL_HTTP_VERSION_2TLS

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

对于php cURL 扩展文档

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);
Run Code Online (Sandbox Code Playgroud)

对于 CURL_HTTP_VERSION_2TLS ,该值似乎是。

CURL_HTTP_VERSION_2TLS = 4
Run Code Online (Sandbox Code Playgroud)

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

在基于 Linux 的系统上rpm你可以检查

rpm -q libcurl4
libcurl4-7.60.0-lp150.2.6.1.x86_64
Run Code Online (Sandbox Code Playgroud)

与 PHP 比较(命令行)

php -r 'phpinfo();' | grep -i 'curl info'
cURL Information => 7.60.0
Run Code Online (Sandbox Code Playgroud)

还与

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
Run Code Online (Sandbox Code Playgroud)