【问题标题】:SSL certificate problem: unable to get local issuer certificateSSL 证书问题:无法获取本地颁发者证书
【发布时间】:2019-04-12 18:55:38
【问题描述】:

我创建了一个 php-curl 文件以从另一台服务器获取 API:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://192.168.4.2/sdk_service/rest/users/login/v1.1');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// curl_setopt($ch, CURLOPT_CAINFO, "C:/xampp/htdocs/curl/cibinong/cacert.pem");
// curl_setopt($ch, CURLOPT_CAPATH, "C:/xampp/htdocs/curl/cibinong/");
$result = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}
print_r($result);

我收到错误消息:

SSL 证书问题:无法获取本地颁发者证书

帮帮我,也许我错过了什么?

【问题讨论】:

  • @MyNameIs IMO 它确实看起来像这个问题,但提到的问题似乎也没有回答这个问题

标签: php curl ssl-certificate


【解决方案1】:

问题在于您获得了无效的 SSL 证书,您需要关闭一些检查。您可以尝试以下选项吗?

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

这将跳过 SSL 主机和 SSL 对等方的验证。因为,这就是你在这种情况下所需要的。

【讨论】:

  • 请将此标记为solution - 这会给我一些代表,并且您让其他用户知道这就是答案。 (点击 +1 和 -1 下方的灰色复选标记)
  • 应该注意,关闭它会让你在中间人攻击中暴露出来
  • 确实如此,但也无法为 IP 地址颁发受信任的 SSL 证书。所以我们需要做出选择,是安全性还是可用性更重要。 (海事组织)
  • 禁用证书检查是一种变通方法,而不是正确的修复方法。不要满足于此。
  • 这不是不可能的。自动将mkcert 用于您自己的证书颁发机构(真的很简单,就像几个命令一样),然后从它生成的任何证书都会被自动信任。
【解决方案2】:

您正在使用 IP 地址访问 HTTPS URL,但实际上很少能正常工作。大多数网站都需要使用 SNI 的名称来获取正确的服务器证书,许多 CA 甚至不向您出售纯 IP 地址的证书。

您应该考虑使用其“正确”和正式名称访问此服务器,以便服务器知道在 TLS 握手中提供哪个证书,而不是禁用证书检查。

如果您确实想连接到这个特定的 IP 地址并且仍然在 URL 中使用正确的名称,您可以使用 CURLOPT_RESOLVE 选项来实现。记录在其他 CURL 选项中。

不要满足于禁用证书检查。这是一种糟糕的解决方法,只会冒着永远存在的风险并使您变得脆弱。

【讨论】:

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