PHP - SSL 证书错误:无法获取本地颁发者证书

2022-08-30 06:14:53

我在Windows 7上运行PHP版本5.6.3作为XAMPP的一部分。

当我尝试使用Mandrill API时,我收到以下错误:

未捕获的异常“Mandrill_HttpError”,其中包含消息“对消息/发送模板的 API 调用失败:SSL 证书问题:无法获取本地颁发者证书”

我已经尝试了我在StackOverflow上阅读的所有内容,包括将以下内容添加到php.ini文件中:

curl.cainfo = "C:\xampp\php\cacert.pem"

当然,从 http://curl.haxx.se/docs/caextract.html 下载了cacert.pem文件到那个位置

但毕竟,重新启动了XAMPP和Apache服务器,但仍然得到相同的错误。

我真的不知道还能尝试什么。

任何人都可以建议我还可以尝试什么吗?


答案 1

终于让它工作了!

  1. 下载证书捆绑包

  2. 把它放在某个地方。在我的情况下,那是目录(如果你使用的是Wamp 64位,那么它是)。c:\wamp\c:\wamp64\

  3. 在 Apache 和 in 中启用(通过在开始时删除它们来取消注释)。但要小心,我的问题是我有两个文件,我需要在它们中执行此操作。一个是你从WAMP任务栏图标获得的那个,另一个是,在我的情况下,在mod_sslphp_openssl.dllphp.ini;php.iniC:\wamp\bin\php\php5.5.12\

  4. 将以下行添加到两个文件中的证书中:php.ini

    curl.cainfo="C:/wamp/cacert.pem"
    openssl.cafile="C:/wamp/cacert.pem"
    
  5. 重新启动 Wamp 服务。


答案 2

编者按:禁用SSL验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以模拟受信任的终结点(例如 GitHub 或其他远程 Git 主机),并且您将容易受到中间人攻击

在将其用作解决方案之前,请确保您完全了解安全问题。

我在Mandrill中遇到了同样的问题.php文件在第65行之后,它说$this->ch = curl_init();

添加以下两行:

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

这解决了我的问题,并使用localhost发送电子邮件,但我建议不要在实时版本上使用它。在实时服务器上,代码应该在没有此代码的情况下工作。


推荐