修复SSL证书问题:无法在PHP中获取real的本地颁发者证书
在我的PHP代码中,我在某个时候执行了一个指向外部网站的cURL。今天,我突然犯了一个错误: SSL证书问题:无法获取本地颁发者证书 这是我的代码的相关部分:修复SSL证书问题:无法在PHP中获取real的本地颁发者证书,php,ssl,curl,ssl-certificate,ca,Php,Ssl,Curl,Ssl Certificate,Ca,在我的PHP代码中,我在某个时候执行了一个指向外部网站的cURL。今天,我突然犯了一个错误: SSL证书问题:无法获取本地颁发者证书 这是我的代码的相关部分: //downloaded from https://curl.haxx.se/docs/caextract.html //(latest version Wed Oct 14 03:12:15 2020 GMT) $cacert_pem = realpath("some/path/to/cacert.pem")
//downloaded from https://curl.haxx.se/docs/caextract.html
//(latest version Wed Oct 14 03:12:15 2020 GMT)
$cacert_pem = realpath("some/path/to/cacert.pem");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($query_data));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, $cacert_pem);
在网上搜索这个问题时,我在这个网站上遇到了很多问题,但没有一个能真正解释到底发生了什么,他们只是告诉我编辑php.ini并指向cacert文件,或者将文件更新为新版本,或者做类似的事情:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
这显然是不推荐的
然后我来到这里,其中一个解决方案是:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $cacert_pem);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $cacert_pem);
错误消失了
因此,我的问题是:
0
相同?根据文档,CURLOPT_SSL_VERIFYHOST的可能值为0、1或2取决于错误的实际原因。如果服务器缺少中间证书,您可以尝试将这些缺少的证书添加到您的信任存储中,即添加到您已经存在的证书之外。我执行了测试,并收到“此服务器的证书链不完整。等级上限为B”警告。我试图访问的站点是