Curl 中出现错误 - 对等证书无法使用已知 CA 证书进行身份验证
Posted
技术标签:
【中文标题】Curl 中出现错误 - 对等证书无法使用已知 CA 证书进行身份验证【英文标题】:Getting error in Curl - Peer certificate cannot be authenticated with known CA certificates 【发布时间】:2013-01-18 22:12:47 【问题描述】:在使用自签名证书进行 ssl 连接时出现以下错误。 "对等证书无法使用已知 CA 证书进行身份验证"
使用 CA 签名证书可以正常工作。 我正在使用 curl_easy_setopt() 设置以下内容。
curl_easy_setopt(MyContext, CURLOPT_CAPATH, CA_CERTIFICATE_PATH) curl_easy_setopt(MyContext, CURLOPT_SSL_VERIFYPEER,TRUE);
卷曲版本 libcurl-7.19.7-26
Openssl 版本是 0_9_8u。
请告诉我如何解决这个问题。
【问题讨论】:
【参考方案1】:libcurl 默认执行对等 SSL 证书验证。这个做完了 通过使用 SSL 库可以用来确保对等方的 CA 证书包 服务器证书有效。
如果您使用以下证书与 HTTPS 或 FTPS 服务器通信 由包中存在的 CA 签名,您可以确保远程服务器 确实是它声称的那个。
在 7.18.0 之前,curl 捆绑了一个严重过时的 ca 捆绑文件,该文件是 默认安装。这些天来,curl 档案中没有 ca 证书 全部。你需要把它们带到别处。例如,请参见下文。
如需了解有关对等 SSL 证书验证的更多信息,请访问 http://curl.haxx.se/docs/sslcerts.html
【讨论】:
【参考方案2】:默认情况下,CURL 通常会验证 SSL 证书以查看其是否有效并由公认的 CA 颁发。为此,curl 使用了一组捆绑的 CA 证书。
如果您想关闭 curl 对证书的验证,请使用 -k(或 --insecure)选项。这是一个例子:
curl --noproxy -k \* -D - https://127.0.0.1:443/some-secure-endpoint
【讨论】:
【参考方案3】:安全问题:此答案会禁用安全功能。不要在生产中使用它!
对于 php,可以关闭 curl 对证书的验证(请参阅下面的警告),例如对于 curl_exec
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
http://php.net/manual/en/function.curl-setopt.php
(您自己评估安全风险,在我的情况下,它位于合作伙伴公司的服务器上,并且所需的文件不包含安全信息 - 恰好位于安全服务器上)
【讨论】:
不好的做法,不要禁用 SSL 验证!【参考方案4】:我们通过将 curl 更新到标准存储库中可用的最新版本并安装最新的 ca-certificates 捆绑包,修复了 CentOS 6 上的类似问题:
yum update curl
yum install ca-certificates
【讨论】:
它是否适用于自签名证书?我也试过 curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0); ,但我的错误仍然存在。 @VamsiKrishnaNeelam 不确定我害怕.. 这是将近 4 年前的事了,不过祝你好运【参考方案5】:虽然此错误发生在使用 git clone
而不是使用 curl
的情况下,但我最近偶然发现了一条相同的错误消息:
对等证书无法使用已知 CA 证书进行身份验证
类似于Arth's findings,适用于 CentOS 6 (为了成功使用带有 git clone
的 HTTPS URL 用于相关的 GitLab 存储库) 涉及更新服务器上的受信任证书 (即使用 HTTPS 的服务器),使用the following steps:
sudo yum install ca-certificates
sudo update-ca-trust enable
sudo cp /path/to/your_new_cert.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust extract
对于curl
的情况(或其他类似的场景)或许以后可以为CentOS上的用户申请相同的证书步骤。
【讨论】:
【参考方案6】:安全问题:此答案会禁用安全功能。不要在生产中使用它!
在“C”中
curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0);
为我工作
【讨论】:
以上是关于Curl 中出现错误 - 对等证书无法使用已知 CA 证书进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章