【问题标题】:PHP cURL SSL Issue with GoDaddy: SSL certificate problem: unable to get local issuer certificateGoDaddy 的 PHP cURL SSL 问题:SSL 证书问题:无法获取本地颁发者证书
【发布时间】:2019-07-04 20:06:49
【问题描述】:

我在使用来自 GoDaddy 的新 SSL 证书时遇到问题,这是我的代码:

<?php
$url = "https://myurl.com";
$ch = curl_init($url);

$certificate_location = "ca-bundle.crt"; // modify this line accordingly (may need to be absolute)
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);

curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_FORBID_REUSE, TRUE);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);

$result = curl_exec($ch);
$errtext = curl_error($ch);
$errnum = curl_errno($ch);

var_dump($result);
var_dump($errtext);
var_dump($errnum);

这导致error 60SSL certificate problem: unable to get local issuer certificate

我尝试获取latest CA certificates extracted from Mozilla 并指向 cURL 以使用它,但没有任何效果。有什么想法吗?

【问题讨论】:

  • 没有给出重现错误的 URL,因此很难提供帮助。如果您收到 google.com 等域的错误,那么您的 ca-bundle.crt 可能有问题。如果您仅针对特定域收到此错误,则可能是域配置错误,通常缺少链证书。
  • @SteffenUllrich 我无法共享原始 URL,但是当我尝试另一个 URL(也使用 godaddy ssl 证书)时,我收到另一个错误:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to dan.co.il:443
  • 确保CURLOPT_CAINFOCURLOPT_CAPATH 是绝对路径而不是相对路径。
  • @odan 我确实使用了绝对路径,没有帮助。

标签: php ssl curl


【解决方案1】:

替换下面的 curl 调用行

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

CURLOPT_SSL_VERIFYPEER:此选项告诉 cURL 验证服务器上 SSL 证书的真实性。

如果你想验证对等体那么

1) 在 Apache 中启用 mod_ssl,在 php.ini 中启用 php_openssl.dll 2)在 php.ini 文件中添加这些证书行,路径为:

curl.cainfo="你的路径/cacert.pem" openssl.cafile="yourpath/cacert.pem"

3) 并重启服务器。

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 2021-05-24
    • 2019-04-12
    • 2018-06-20
    • 2021-03-21
    相关资源
    最近更新 更多