我注意到PHP中的CURL有点问题。每当我请求https://
连接时,它都会返回“false”,并且当我打开PHP页面时,我尝试访问的每个网站都会显示不受信任的证书。
这是我的请求方法:
private function request($url, $params, $method = "GET") {
if ($method == "GET")
$url = $this->structGET($url, $params);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if (isset($_SERVER['HTTP_USER_AGENT'])) {
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
} else {
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.X.Y.Z Safari/525.13.');
}
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$header[] = 'Accept-Language: EN';
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
if ($method == "POST") {
curl_setopt($ch, CURLOPT_POST, true);
if ($params)
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
这是我在尝试访问Facebook时返回的内容。
该网站的安全证书不受信任!
您试图到达 www.facebook.com,但服务器提供了由证书颁发的证书 您的计算机操作系统不信任的实体。这个 可能意味着服务器已生成自己的安全凭证, 哪个谷歌浏览器不能依赖身份信息,或者 攻击者可能试图拦截您的通信。你不能 继续,因为网站运营商已要求提高安全性 对于这个域名。
答案 0 :(得分:2)
请勿使用禁用证书验证的技术。虽然他们可以解决"表面上你的问题,他们只是忽略了问题,而不是修复它。切勿在生产代码中执行此操作。
最可能的原因是您在拥有MITM公司代理的网络上。无论这些设备合法,它们都是有效的MITM设备。
他们所做的是他们将使用自己的内部CA颁发的证书替换原始证书,以便能够监控流量。
如果您的网络管理员合法设置了此设备,您应该能够获得其CA证书(在这种情况下,CA证书通常会安装在集中管理的所有最终用户计算机上)。
作为开发人员,您可能已经安装了自己的计算机,并且可能没有安装CA证书。向网络管理员询问该CA证书,并使用浏览器使用的证书和PHP中的curl(两个不同的位置)进行安装。卷曲默认位置可能取决于您使用的系统,但您也可以通过CURLOPT_CAINFO
进行配置。
据推测,您在本地网络中进行开发,但可能会在完成后在不同的网络上部署该服务。确保这是可配置的。
答案 1 :(得分:0)
是的,当cURL试图查看SSL是否已经过验证时会发生这种情况。 Facebook通常有一个经过验证的签名,但可能是因为网络,它返回无效(在我的情况下发生:使用fortiguard代理,facebook被阻止!)
所以,你可以做的是,你可以选择完全忽略这个错误。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
那应该解决它。但是,如果您想要正确正确,那么您应该使用代理或其他东西或获取服务器的证书(如果它是您的)。
答案 2 :(得分:-1)
您需要为SSL添加这两行
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);