gpt4 book ai didi

PHP curl : enforce low TLS version

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:42 25 4
gpt4 key购买 nike

目标是为 TLS v1.2 连接编写 PHP 代码测试。获得成功的答案不是问题,但我不能通过在 PHP 中使用旧的 TLS 版本来产生失败。显然需要测试失败来证明代码的正确性(在某种合理程度上)。

在命令行上我可以想出这个,给出一个明确的区别:

$ curl -X POST https://api.paypal.com/v1/oauth2/token 
{"name":"AUTHENTICATION_FAILURE", [...]

$ curl --tls-max 1.1 -X POST https://api.paypal.com/v1/oauth2/token
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

在 PHP 中我试过这个...

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/token');
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// $response: '{"name":"AUTHENTICATION_FAILURE", [...]

... 这意味着成功的 TLS v1.2 连接,正如在上面的 CLI 示例中所见,尽管请求的是 TLS v1.1。这与请求 CURL_SSLVERSION_TLSv1_2 时的结果相同。

这是带有 cURL 7.64.0 的 PHP 7.3.7,我希望我可以不用为了禁用 TLS v1.2 支持而重新编译 PHP。

最佳答案

要回答我自己的问题,文档位于 https://www.php.net/function.curl-setopt是/已经过时了。 cURL 7.54 更改了 CURL_SSLVERSION_ 宏的行为,这些现在设置了连接的最低可接受 TLS 版本。它还引入了 CURL_SSLVERSION_MAX_ 宏,它设置了尝试的最大 TLS 版本。在更新 PHP 文档之前,请参阅 https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html .

因此,限制与 TLS v1.1 的连接是这样的:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.paypal.com/v1/oauth2/token');
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_MAX_TLSv1_1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);

关于PHP curl : enforce low TLS version,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57297524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com