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 证书进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

curl: (60) 对等的证书颁发者无法识别。

SSL 对等证书或 SSH 远程密钥不正确

SSL:无法从对等证书中获取公用名

curl 命令 - 无法加载客户端证书 -8018

curl 命令 - 无法加载客户端证书 -8018

curl:未知错误(0x80092012)-吊销功能无法检查证书的吊销