📅  最后修改于: 2023-12-03 14:40:24.205000             🧑  作者: Mango
当我们在使用 PHP 中的 CURL 执行 HTTPS 请求时,可能会遇到以下错误:
CURL error 60: SSL certificate problem: self signed certificate in certificate chain.
这个错误的原因是因为 CURL 无法验证目标服务器的 SSL 证书。这可能是因为目标服务器的 SSL 证书是由自己签发的,而不是由经过认证的第三方机构签发的。
禁用 SSL 验证并不是推荐的方法,因为这会降低请求的安全性。但是在某些情况下,比如我们只是需要测试一下 API 是否可用,可以考虑暂时禁用 SSL 验证。
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
上述代码中,我们将 CURLOPT_SSL_VERIFYHOST
和 CURLOPT_SSL_VERIFYPEER
设置为 false
,表示禁用 SSL 验证。
我们可以将目标服务器的 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 证书问题。