php - PHP cURL 错误:错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败
问题描述
**我已经搜索了stackoverflow以及其他来源,不幸的是,即使我尝试了各种方法,我也没有完美的解决方案来解决这个问题,所以我的请求是帮助代码不共享任何链接**
我在 Windows 7 上使用 ZeroXIII - 13.3.2 这是我用于下载网页的 php Curl 函数
function gdllssl3($target_url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36');
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_CAINFO, "D:\cacert-2019-05-15.pem");
curl_setopt($ch, CURLOPT_SSLVERSION,4);
curl_setopt($ch, CURLOPT_TIMEOUT,10);
$html= curl_exec($ch);
if (!$html) {
echo "<br />cURL error number:" .curl_errno($ch);
echo "<br />cURL error:" . curl_error($ch);
}
return $html;
}
echo $url=gdllssl3('https://www.ratemyagent.com.au/real-estate-profile/sales/new-south-wales/agents');
它返回给我这个错误
cURL 错误号:35 cURL 错误:错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报握手失败
使用从 Mozilla 提取的最新 CA 证书
解决方案
您似乎正在尝试连接到支持 TLS v1.1 和 TLS v1.2 的远程服务器,而不是 TLS v1.0
您能否尝试更改此行:
curl_setopt($ch, CURLOPT_SSLVERSION, 4);
至
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
CURLOPT_SSLVERSION 4
(CURL_SSLVERSION_TLSv1_0) 表示 TLS v1.0,而5
(CURL_SSLVERSION_TLSv1_1) 表示 TLS v1.1
有关信息,TLS v1.0 现在已弃用,出于安全原因必须避免使用。 https://blog.pcisecuritystandards.org/are-you-ready-for-30-june-2018-sayin-goodbye-to-ssl-early-tls
最终,正如 Patrick Mevzek 在下面的评论中所提到的,您最好完全删除该行以让 curl 模块选择最受支持的协议,如文档中所述(PHP cURL)
推荐阅读
- java - SQLite 找不到字母字符串列,但可以找到数字字符串 - E/SQLiteLog:(1)没有这样的列:(subjectName 变量)
- powershell - Select-String 的替代品
- javascript - events.js:292 抛出错误;// 未处理的“错误”事件
- java - android java中的圆角videoview
- flutter - flutter listview skroll重置文本小部件中的计数器
- jquery - 如何循环数组并将其附加到 div?
- c - C 中的循环在 Repl.it 中退出,但在使用 gcc 在本地运行时不退出
- mariadb - mariadb 从子查询中选择多列的最有效方法
- c# - Blazor:为什么首先调用 NavigateTo 销毁生产中的作用域服务?
- vb.net - 如何为数据绑定自定义组合框获取第二个 ValueMember