亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP cURL:強制執行低 TLS 版本

PHP cURL:強制執行低 TLS 版本

PHP
肥皂起泡泡 2021-11-05 16:12:51
目標是為 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,我希望我可以在不重新編譯 PHP 的情況下逃脫,只是為了禁用 TLS v1.2 支持。
查看完整描述

3 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

小 PHP/CURL 測試腳本:


<?php


echo 'PHP version: ' . phpversion() . PHP_EOL;

echo 'cURL version: ' . curl_version()['version'] . PHP_EOL;


$ch = curl_init('https://www.howsmyssl.com/a/check');

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);


//curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_0); // TLS 1.0

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1); // TLS 1.1

//curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // TLS 1.2 or 1.3


$data = curl_exec($ch);

curl_close($ch);


$json = json_decode($data);


echo ($data ? $json->tls_version : 'curl request failed') . PHP_EOL;


查看完整回答
反對 回復 2021-11-05
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

為了回答我自己的問題,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);


查看完整回答
反對 回復 2021-11-05
?
慕虎7371278

TA貢獻1802條經驗 獲得超4個贊

鑒于 TLS v1.1 或更高版本(在 7.34.0 中添加)非常清楚以及“可以使用 CURL_SSLVERSION_MAX_ 宏之一設置最大 TLS 版本”,“請求的 TLS v1.1”是錯誤的


查看完整回答
反對 回復 2021-11-05
  • 3 回答
  • 0 關注
  • 564 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號