📌  相关文章
📜  CURL 错误 60:SSL 证书问题:证书链中的自签名证书 - PHP (1)

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

CURL 错误 60:SSL 证书问题:证书链中的自签名证书 - PHP

当我们在使用 PHP 中的 CURL 执行 HTTPS 请求时,可能会遇到以下错误:

CURL error 60: SSL certificate problem: self signed certificate in certificate chain.

这个错误的原因是因为 CURL 无法验证目标服务器的 SSL 证书。这可能是因为目标服务器的 SSL 证书是由自己签发的,而不是由经过认证的第三方机构签发的。

解决方法
方法一:禁用 SSL 验证

禁用 SSL 验证并不是推荐的方法,因为这会降低请求的安全性。但是在某些情况下,比如我们只是需要测试一下 API 是否可用,可以考虑暂时禁用 SSL 验证。

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

上述代码中,我们将 CURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEER 设置为 false,表示禁用 SSL 验证。

方法二:使用正确的 CA 证书

我们可以将目标服务器的 SSL 证书添加到 CURL 的 CA 证书列表中,这样 CURL 就能够验证目标服务器的 SSL 证书了。

做法是将目标服务器的 SSL 证书保存到本地,然后在 CURL 中指定 CA 证书列表的路径。

curl_setopt($ch, CURLOPT_CAINFO, "/path/to/ca-bundle.crt");

其中 /path/to/ca-bundle.crt 是 CA 证书列表的路径。我们可以使用 curl-ca-bundle 这个项目提供的 cacert.pem 文件作为我们的 CA 证书列表。

方法三:忽略证书中的自签名部分

如果目标服务器的 SSL 证书是由权威机构签发的,但是其中包含一些自签名部分,我们可以使用 CURLOPT_SSL_VERIFYSTATUS 选项来忽略这些自签名部分。

curl_setopt($ch, CURLOPT_SSL_VERIFYSTATUS, false);
结论

以上就是解决 CURL 错误 60:SSL 证书问题的几种方法。其中禁用 SSL 验证不是推荐的方法,因为这会降低请求的安全性。我们应该尽量使用第二种或第三种方法,使用正确的 CA 证书或忽略自签名部分来解决 SSL 证书问题。