Php cURL错误:错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败

Php cURL错误:错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败,php,ssl,curl,Php,Ssl,Curl,**我已经搜索了stackoverflow以及其他来源,不幸的是,我没有找到完美的解决方案来解决这个问题,即使我尝试了各种方法,所以我的请求是代码中的帮助,而不是共享任何链接** 我在Windows7上使用ZeroXIII-13.3.2这里是我下载网页的php Curl函数 function gdllssl3($target_url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT

**我已经搜索了stackoverflow以及其他来源,不幸的是,我没有找到完美的解决方案来解决这个问题,即使我尝试了各种方法,所以我的请求是代码中的帮助,而不是共享任何链接**

我在Windows7上使用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');
函数gdllssl3($target\u url){
$ch=curl_init();
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0(windowsnt 6.1;Win64;x64)AppleWebKit/537.36(KHTML,像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”);
卷曲设置($ch,卷曲设置,4);
curl_setopt($ch,CURLOPT_超时,10);
$html=curl\u exec($ch);
如果(!$html){
echo“
卷曲错误号:”.cURL\u errno($ch); echo“
卷曲错误:“.cURL\u错误($ch); } 返回$html; } echo$url=gdllssl3('https://www.ratemyagent.com.au/real-estate-profile/sales/new-south-wales/agents');
它返回给我这个错误

卷曲错误号:35 cURL错误:错误:14077410:SSL例程:SSL23\u GET\u SERVER\u HELLO:sslv3警报握手失败


使用从Mozilla提取的最新CA证书,您似乎正在尝试连接到支持TLS v1.1和TLS v1.2的远程服务器,而不是TLS v1.0

你能试着换一下这行吗

curl_setopt($ch, CURLOPT_SSLVERSION, 4);

CURLOPT_Slversion
4(CURL_Slversion_TLSv1_0)表示TLS v1.0,而
5(CURL_Slversion_TLSv1_1)表示TLS v1.1

作为参考,TLS v1.0现在已弃用,出于安全原因,必须避免使用。


最后,正如Patrick Mevzek在下面的评论中提到的,您最好完全删除该行,让curl模块选择受支持的最佳协议,正如文档()中所述()

您不应该强制使用特定版本。如果服务器支持1.2(远优于1.1),该怎么办?您可以自动协商,而不是强制1.1,甚至当服务器停止接受1.1时,您的代码停止工作。。。除了在非常特定的条件下,更喜欢自动协商,库将自动选择最佳(最高版本)。请参阅文档,其中说“最好不要设置此值,而是让它使用默认值。”。但事实上,使用符号常量比使用整数要好得多。谁会记得,curl中的
4
代表
TLS 1.0
?我完全同意你的观点,这仍然是OP理解此curl选项含义的一种方式(可能还有所使用的其他选项的含义,比如在使用CAINFO时使用VERIFYPEER
false
)你仍然可以给他一个更好的建议,完全删除该行……事实上,基于服务器能够协商1.1或1.2,因此最好使用最大的一个,即1.2,而不是强制降级到1.1。然而,正如他提到的使用Windows7,OP可能会有问题。基于某些客户端无法在Windows 7上执行1.2。此操作系统版本在6个月(2020年1月)内下线。cf ServerHello TLS消息发生在任何证书交换之前,因此问题不能与您使用的任何证书或CA有关。
curl\u setopt($ch,CURLOPT\u SSL\u VERIFYPEER,false)这非常糟糕,不应该这样做。你会让自己受到劫持攻击,基本上这会使使用HTTPS(TLS)的任何功能无效,你也可以使用HTTP。一般评论:说“我已经搜索了……我没有找到完美的解决方案……甚至我尝试了所有方法”绝对没有用(你可以编辑你的问题以删除它,因为它不会添加任何内容)。没有人知道您找到了哪些解决方案以及您测试了什么。相反,你应该清楚地说明你已经尝试了什么,得到了什么结果,以及你期望得到什么。像您这样的“通知”不会阻止人们判断您的问题与其他任何要求此错误的问题重复。
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);