首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP CURL错误: SSL证书问题:无法获得本地颁发者证书

问PHP CURL错误: SSL证书问题:无法获得本地颁发者证书
EN

Stack Overflow用户
提问于 2019-07-16 02:10:13
回答 1查看 983关注 0票数 0

我查看了STACKOVERFLOW上列出的每个解决方案。什么也解决不了这个问题。只有当我将端口(在本例中为5443 )附加到cURL代码时,我才会遇到问题。如果我做了一个没有端口的CLI,它就能工作。在代码中,如果我只做一个直接的https://HOSTNAME/api/test而不指定端口,它就能工作。不管怎么说,我都能看得出来。这一切都是关于认证的。服务器上的端口是打开的。

我有GoDaddy G2证书。我有一个新构建的带有CA-bundle的服务器,我尝试使用根证书,这个证书包来自

代码语言:javascript
复制
"https://curl.haxx.se/docs/caextract.html"

还有其他的组合。当我添加端口号时,我总是得到相同的错误:

"SSL证书问题:无法获得本地颁发者证书“

代码语言:javascript
复制
$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");

//试过这个

代码语言:javascript
复制
curl_setopt($curl,CURLOPT_CAINFO,"/fully_resolved_path/cacert.pem"); 

//这实际上是默认设置,1不再受支持,在这种情况下对最终结果没有任何影响。

代码语言:javascript
复制
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

//失败时,这是真的!在FALSE时不执行检查。

代码语言:javascript
复制
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证书中的公共名称与主机名匹配。如前所述,它可以工作,直到我添加一个端口号。

EN

回答 1

Stack Overflow用户

发布于 2019-07-16 06:25:43

我查看了STACKOVERFLOW上列出的每个解决方案。什么也解决不了这个问题。

哇。但不幸的是,这种“信息”是无用的,因为它没有说出你真正尝试过的任何东西。

只有当我将端口(在本例中为5443 )附加到cURL代码时,我才会遇到问题。如果我做了一个没有端口的CLI,它就能工作。

这是因为没有端口,它将使用端口443。由于您显式地使用端口5443,所以使用不同的设置连接到不同的服务器,与端口443上的服务器提供不同的证书。只要尝试显式地将端口设置为443,您就会发现它工作正常。

端口5443上的服务器可能正在提供一些自签名证书、某个未知CA颁发的证书或缺少必要的链证书(即配置错误)。这些通常是与这种错误相关的原因,您应该已经看到了这一点,也应该看到解决方案,因为您“查看了STACKOVERFLOW上列出的每个解决方案”。只需记住,要修复这个问题,您需要查看端口5443的服务器,而不是端口443的默认服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57049205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档