代码之家  ›  专栏  ›  技术社区  ›  Brett

PayPal最近的TLS 1.2/HTTP 1.1更新和何时使用

  •  6
  • Brett  · 技术社区  · 7 年前

    关于贝宝最近 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 ,即 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?

    2 回复  |  直到 6 年前
        1
  •  2
  •   LMC    6 年前

    www.paypal.com正在使用http/2,如中所示

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

    根据 official docs 你最好的选择是

    curl_http_版本\u 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_版本

    仅通过TLS(HTTPS)尝试HTTP 2。如果HTTP 2不能与HTTPS服务器协商,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
    

    使用整数值而不是php常量可以在 libcurl 支持包版本支持它。

    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
    
        2
  •  2
  •   nbari    6 年前

    可能实现进一步兼容性的最好和最简单的方法就是尽量使库保持最新,主要是 curl openssl (检查) nghttp ,这可能有助于防止添加一些常量,并且通过使用定义的“默认值”,应该可以正常工作。

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

    从2016年年中开始,curl将默认使用HTTP/1.1作为HTTP服务器。如果您连接到HTTPS,并且您具有内置HTTP/2功能的libcurl,那么curl将尝试自动使用HTTP/2,或者在协商失败时降至1.1。默认情况下,不支持HTTP/2的curl通过https获取1.1。