返回

cURL 错误 60:SSL 证书验证失败 - 详尽指南及解决方案

php

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

简介

在使用 PHP 的 cURL 函数库向远程服务器发起 SSL 连接时,可能会遇到 "cURL 错误 60:SSL 证书:无法获取本地颁发者证书" 的错误。本指南将深入探讨此错误的成因并提供分步解决方法。

错误成因

此错误通常是由于 PHP 无法验证服务器提供的 SSL 证书造成的。当 cURL 尝试建立 SSL 连接时,它需要访问一个包含已知受信任的颁发者证书的本地证书仓库。如果该仓库中缺少必要的颁发者证书,cURL 将无法验证服务器证书并抛出此错误。

解决步骤

要解决此错误,需要采取以下步骤:

  1. 下载并安装 cacert.pem 证书:

    • 导航至 cacert.pem 下载证书文件。
    • 将证书文件复制到一个安全的位置,例如 /etc/ssl/certs
  2. 更新 php.ini:

    • 打开 php.ini 文件。
    • 添加以下行:
curl.cainfo = "/etc/ssl/certs/cacert.pem"
  • 确保路径与证书文件的实际位置相匹配。
  1. 重启 Apache:

    • 重新启动 Apache 以使更改生效。
  2. 添加 cURL 选项:

    • 在代码中,在创建 cURL 会话之前添加以下选项:
curl_setopt($curl, CURLOPT_CAINFO, '/etc/ssl/certs/cacert.pem');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);

其他提示

  • 确保已启用 SSL 模块和 PHP cURL 扩展。
  • 尝试使用不同的 SSL 证书。
  • 检查你的防火墙设置是否阻止了与远程服务器的连接。
  • 联系 Stripe 支持以获取进一步的帮助。

结论

通过遵循这些步骤,你可以解决 cURL 错误 60 并建立安全的 SSL 连接。了解 SSL 证书验证过程的原理对于防止类似错误至关重要。

常见问题解答

1. 为什么我会收到此错误?

此错误通常是由于 PHP 无法验证远程服务器提供的 SSL 证书造成的,这是因为本地证书仓库中缺少受信任的颁发者证书。

2. 如何知道我缺少哪些证书?

你可以使用 OpenSSL 命令行工具检查本地证书仓库:

openssl verify -verbose <certificate-file>

3. 如何添加颁发者证书?

下载颁发者证书并将其添加到 PHP 的本地证书仓库中。有关详细信息,请参阅步骤 1。

4. 为什么还需要 SSL_VERIFYPEER 选项?

SSL_VERIFYPEER 选项强制 cURL 验证服务器证书,防止中间人攻击。

5. 如果我无法访问远程服务器,我该怎么办?

检查防火墙设置、路由器配置和远程服务器的可用性。如果问题仍然存在,请联系服务器管理员。