在Curl中出现错误 - 对已知CA证书无法进行身份验证

13

在使用自签名证书建立ssl连接时,我遇到了以下错误: "Peer certificate cannot be authenticated with known CA certificates"

使用CA签名证书可以正常工作。 我正在使用curl_easy_setopt()设置以下内容。

curl_easy_setopt(MyContext, CURLOPT_CAPATH, CA_CERTIFICATE_PATH)
curl_easy_setopt(MyContext, CURLOPT_SSL_VERIFYPEER,TRUE);

curl版本:

libcurl-7.19.7-26

Openssl版本为:

0_9_8u
请告诉我如何解决这个问题。
7个回答

8

默认情况下,CURL通常会验证SSL证书是否有效,并由已认可的CA发放。为此,curl使用一组捆绑的CA证书。

如果您想关闭curl对证书的验证,请使用-k(或--insecure)选项。以下是一个示例:

curl --noproxy -k \* -D - https://127.0.0.1:443/some-secure-endpoint

8

安全问题:此答案禁用了一个安全功能。不要在生产环境中使用!

对于 PHP,可以关闭 curl 对证书的验证(请参阅下面的警告),例如在 curl_exec 中使用。

  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

http://php.net/manual/zh/function.curl-setopt.php

(自行评估安全风险,在我的情况下,它在合作伙伴公司的服务器上,所需文件不包含任何安全信息- 只是碰巧在安全服务器上)


15
不良做法,不要禁用SSL验证! - André Figueira

6

我们通过更新 CentOS 6 上的 curl 到标准仓库中最新版本并安装最新的 ca-certificates 捆绑包来解决类似问题:

yum update curl
yum install ca-certificates

它对自签名证书有效吗?我也尝试了curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0);,但是我仍然遇到了错误。 - VamsiKrishna Neelam
@VamsiKrishnaNeelam 不好意思,我不确定..这已经接近4年前的事情了,祝你好运。 - Arth

4

libcurl默认执行对等SSL证书验证。这是通过使用SSL库可以使用的CA证书捆绑包来完成的,以确保对等方的服务器证书有效。

如果您使用在捆绑包中存在的CA签名的证书与HTTPS或FTPS服务器通信,则可以确保远程服务器确实是它声称的那个。

在7.18.0之前,curl默认安装一个严重过时的ca bundle文件。现在,curl档案没有任何ca证书。您需要从其他地方获取它们。请参见以下示例。

有关Peer SSL证书验证的更多信息,请访问http://curl.haxx.se/docs/sslcerts.html


2
尽管这个错误发生在使用git clone而非使用curl的情况下,但我最近遇到了一个相同的错误信息:

无法用已知的CA证书验证对等证书

Arth的发现类似,在CentOS 6上使HTTPS URL能够成功地与相关的GitLab存储库一起使用git clone的方法之一涉及更新服务器(即使用HTTPS的服务器)上的受信任证书,使用以下步骤
  1. sudo yum install ca-certificates
  2. sudo update-ca-trust enable
  3. sudo cp /path/to/your_new_cert.crt /etc/pki/ca-trust/source/anchors/
  4. sudo update-ca-trust extract
也许将来可以为 CentOS 用户在 curl(或其他类似情况)的情况下应用相同的证书步骤。

2

我们检查并观察到,Centos 8存在代理问题,导致您的软件包无法更新或下载。请尝试在文件 /etc/dnf/dnf.conf 中添加 sslverify=0

这对我很有用。

还要确保您在服务器上拥有正确的互联网访问权限。


这对我也起作用了。谢谢。 - undefined

1
安全问题:此答案禁用了一个安全功能。不要在生产环境中使用! 在C语言中:
curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0);

对我很有帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接