我查看了STACKOVERFLOW上列出的每个解决方案。什么也解决不了这个问题。只有当我将端口(在本例中为5443 )附加到cURL代码时,我才会遇到问题。如果我做了一个没有端口的CLI,它就能工作。在代码中,如果我只做一个直接的https://HOSTNAME/api/test而不指定端口,它就能工作。不管怎么说,我都能看得出来。这一切都是关于认证的。服务器上的端口是打开的。
我有GoDaddy G2证书。我有一个新构建的带有CA-bundle的服务器,我尝试使用根证书,这个证书包来自
"https://curl.haxx.se/docs/caextract.html"还有其他的组合。当我添加端口号时,我总是得到相同的错误:
"SSL证书问题:无法获得本地颁发者证书“
$url = "https://HOSTNAME/api/test";
$curl = curl_init();
if ($curl === false)
{
echo "Failure";
} else
{
curl_setopt($curl, CURLOPT_PORT, 5443);
curl_setopt($curl, CURLOPT_HTTPGET, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// Turn on SSL certificate verification
curl_setopt($curl, CURLOPT_CAPATH, "/fully_resolved_path/");
// and tried this way too
curl_setopt($curl, CURLOPT_CAPATH, "/fully_resolved_path");//试过这个
curl_setopt($curl,CURLOPT_CAINFO,"/fully_resolved_path/cacert.pem"); //这实际上是默认设置,1不再受支持,在这种情况下对最终结果没有任何影响。
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);//失败时,这是真的!在FALSE时不执行检查。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
$result = curl_exec($curl);
if ($result === false)
{
echo curl_error($curl);
} else
{
echo $result;
}
curl_close($curl);}
一切都按预期的方式设置和工作,返回一个JSON对象。只有当我加上端口号时,它才会窒息。SSL证书中的公共名称与主机名匹配。如前所述,它可以工作,直到我添加一个端口号。
发布于 2019-07-16 06:25:43
我查看了STACKOVERFLOW上列出的每个解决方案。什么也解决不了这个问题。
哇。但不幸的是,这种“信息”是无用的,因为它没有说出你真正尝试过的任何东西。
只有当我将端口(在本例中为5443 )附加到cURL代码时,我才会遇到问题。如果我做了一个没有端口的CLI,它就能工作。
这是因为没有端口,它将使用端口443。由于您显式地使用端口5443,所以使用不同的设置连接到不同的服务器,与端口443上的服务器提供不同的证书。只要尝试显式地将端口设置为443,您就会发现它工作正常。
端口5443上的服务器可能正在提供一些自签名证书、某个未知CA颁发的证书或缺少必要的链证书(即配置错误)。这些通常是与这种错误相关的原因,您应该已经看到了这一点,也应该看到解决方案,因为您“查看了STACKOVERFLOW上列出的每个解决方案”。只需记住,要修复这个问题,您需要查看端口5443的服务器,而不是端口443的默认服务器。
https://stackoverflow.com/questions/57049205
复制相似问题