📌  相关文章
📜  cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书 (1)

📅  最后修改于: 2023-12-03 14:40:24.203000             🧑  作者: Mango

cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书

简介

在进行HTTPS请求时,cURL可能会遇到"SSL证书问题:无法获取本地颁发者证书"或者"SSL证书验证失败"的错误。这通常是由于cURL无法验证服务器颁发的SSL证书引起的。

原因分析

SSL证书是服务器呈现给客户端的一种安全证书,用于验证服务器身份和确保数据传输的安全性。如果cURL无法验证SSL证书,则会出现错误60。

这个问题通常有两个常见原因:

  • 服务器使用的证书是自签名的,而不是由受信任的第三方机构颁发的。
  • cURL不具备受信任的根证书颁发者的颁发的根证书。
解决方案

解决这个问题的方法是向cURL提供需要验证的SSL证书信息。下面是一些解决方案。

使用curl_setopt函数

使用curl_setopt函数为cURL设置CURLOPT_SSL_VERIFYPEER和CURLOPT_CAINFO参数。

  • CURLOPT_SSL_VERIFYPEER设置为TRUE,表示验证SSL证书。
  • CURLOPT_CAINFO指定要使用的根证书文件的路径。该文件应该包含受信任的证书颁发者的根证书。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");
$result = curl_exec($ch);
curl_close($ch);
禁用SSL验证

禁用SSL验证是一种简单的解决方案,但不够安全,因为它会使连接变得容易受到中间人攻击。这仅适用于仅仅测试或者特殊场景下。

将CURLOPT_SSL_VERIFYPEER设置为FALSE可以禁用SSL验证。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$result = curl_exec($ch);
curl_close($ch);
更新根证书

在操作系统或cURL的TrustStore中下载并更新受信任的根证书,以便支持来自新的证书颁发者的证书。

Windows操作系统

Windows中的受信任根证书由Microsoft维护。您可以通过以下步骤更新根证书:

  1. 在浏览器中打开www.microsoft.com,并搜索“Microsoft受信任的根证书”。
  2. 从Microsoft下载并安装更新的根证书。

Linux操作系统

在Linux中,您可以使用以下命令更新根证书:

sudo apt-get install ca-certificates
sudo update-ca-certificates
小结

无论您选择哪种解决方案,了解cURL的SSL验证是非常重要的,因为它可以提高安全性,避免中间人攻击,并保护您的用户数据。

尽管使用cURL的SSL验证需要耗费一些时间和努力,但这是值得的,因为它可以让您拥有更安全、更可靠的网络连接。