返回
cURL 错误 60:SSL 证书验证失败 - 详尽指南及解决方案
php
2024-03-06 18:05:01
cURL 错误 60:SSL 证书:无法获取本地颁发者证书
简介
在使用 PHP 的 cURL 函数库向远程服务器发起 SSL 连接时,可能会遇到 "cURL 错误 60:SSL 证书:无法获取本地颁发者证书" 的错误。本指南将深入探讨此错误的成因并提供分步解决方法。
错误成因
此错误通常是由于 PHP 无法验证服务器提供的 SSL 证书造成的。当 cURL 尝试建立 SSL 连接时,它需要访问一个包含已知受信任的颁发者证书的本地证书仓库。如果该仓库中缺少必要的颁发者证书,cURL 将无法验证服务器证书并抛出此错误。
解决步骤
要解决此错误,需要采取以下步骤:
-
下载并安装 cacert.pem 证书:
- 导航至 cacert.pem 下载证书文件。
- 将证书文件复制到一个安全的位置,例如
/etc/ssl/certs
。
-
更新 php.ini:
- 打开 php.ini 文件。
- 添加以下行:
curl.cainfo = "/etc/ssl/certs/cacert.pem"
- 确保路径与证书文件的实际位置相匹配。
-
重启 Apache:
- 重新启动 Apache 以使更改生效。
-
添加 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. 如果我无法访问远程服务器,我该怎么办?
检查防火墙设置、路由器配置和远程服务器的可用性。如果问题仍然存在,请联系服务器管理员。