在尝试访问HTTPSurl时,如何使用cURL处理证书?

我正在使用curl获得以下错误:

curl:(77)错误设置证书validation位置:
   CAfile:/etc/ssl/certs/ca-certificates.crt
   CApath:无

如何设置此证书validation位置? 谢谢。

此错误与缺less的软件包相关: ca-certificates 。 安装它。

在Ubuntu Linux(和类似的发行版)中:

 # apt-get install ca-certificates 

在CygWin通过Apt-Cyg

 # apt-cyg install ca-certificates 

在Arch Linux(树莓派)

 # pacman -S ca-certificates 

该文件告诉:

此软件包包含CA证书的PEM文件,以允许基于SSL的应用程序检查SSL连接的真实性。

如所见: Debian – squeeze中压缩包中ca-certificates包的详细信息

我也安装了最新版本的CA证书,但仍然收到错误:

 curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none 

问题是curl期望证书在path/etc/pki/tls/certs/ca-bundle.crt但找不到它,因为它在path/etc/ssl/certs/ca-certificates.crt

通过运行将我的证书复制到预期的目的地

 sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt 

为我工作。 如果目标目的地不存在,您将需要为目标目的地创build文件夹

 sudo mkdir -p /etc/pki/tls/certs 

如果需要,修改上述命令,使目标文件名与curl预期的path匹配, /etc/pki/tls/certs/ca-bundle.crtreplace为错误消息中“CAfile:”后面的path。

把这个放到你的.bashrc

 # fix CURL certificates path export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt 

(见Robert的评论)

用以下内容创build一个~/.curlrc文件

 cacert=/etc/ssl/certs/ca-certificates.crt 

解决错误的最快方法是在curl请求的某处添加-k选项。 该选项“允许连接到没有证书的SSL引用”。 (从curl – 帮助)

请注意,这可能意味着您没有与您认为自己的端点通话,因为他们正在提交未经您信任的CA签名的证书。

例如:

 $ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg 

给了我下面的错误回应:

 curl: (77) error setting certificate verify locations: CAfile: /usr/ssl/certs/ca-bundle.crt CApath: none 

我加上-k:

 curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k 

并没有错误信息。 作为奖励,现在我已经安装了apt-cyg。 和证书。

$ man curl

 --cert-type <type> (SSL) Tells curl what certificate type the provided certificate is in. PEM, DER and ENG are recognized types. If not specified, PEM is assumed. If this option is used several times, the last one will be used. --cacert <CA certificate> (SSL) Tells curl to use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format. Normally curl is built to use a default file for this, so this option is typically used to alter that default file. 

@roens是正确的。 这会影响所有的Anaconda用户,出现以下错误
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

解决方法是使用默认的系统curl,并避免混淆前面的Anaconda PATHvariables。 你也可以

  1. 重命名Anaconda curl二进制:)
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. 删除Anacondacurl
    conda remove curl

$ which curl /usr/bin/curl

Anaconda Ubuntu curl Github问题 https://github.com/conda/conda-recipes/issues/352

解决此问题的另一种方法是禁用证书validation:

 echo insecure >> ~/.curlrc 

对于在Windows上的XAMPP上运行的PHP代码,我发现我需要编辑php.ini来包含下面的内容

 [curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo = curl-ca-bundle.crt 

然后复制到一个文件https://curl.haxx.se/ca/cacert.pem并重命名为curl-ca-bundle.crt并将其放在;\ xampppath下(我无法获得curl.capath的工作) 。 我还发现cURL站点上的CAbundle对于我连接的远程站点来说是不够的,所以使用了一个在http://winampplugins.co.uk上预编译的curl 7.47.1的Windows版本/curl/

看来你的curl指向一个不存在CA证书或类似的文件。

有关使用curl的CA证书的主要参考,请参阅: https : //curl.haxx.se/docs/sslcerts.html

这对我有效

 sudo apt-get install ca-certificates 

然后进入证书文件夹

 sudo cd /etc/ssl/certs 

然后将ca-certificates.crt文件复制到/etc/pki/tls/certs

 sudo cp ca-certificates.crt /etc/pki/tls/certs 

如果没有tls / certs文件夹:创build一个并使用chmod 777 -R folderNAME更改权限

curl默认使用Certificate Authority (CA)公钥(CA证书)的“包”来执行SSL证书validation。 默认包名为curl-ca-bundle.crt; 您可以使用–cacert选项指定备用文件。

如果此HTTPS服务器使用包中表示的由CA签名的证书,证书validation可能由于证书问题(可能已过期,或名称可能与URL中的域名不匹配)而失败。

如果您想closures卷发的证书validation,请使用-k(或--insecure )选项。

例如

 curl --insecure http://........ 

对于什么是值得的,检查正在运行的which curl也是非常重要的。

我维护的共享机器上的用户已经得到这个错误。 但事实certificate是因为他们安装了Anaconda( http://continuum.io )。 这样做把Anaconda的二进制path放在标准的$PATH之前,它自带了curl二进制文件,在find安装在这台Ubuntu机器上的默authentication书时遇到了麻烦。

我有完全相同的问题。 事实certificate,我的/etc/ssl/certs/ca-certificates.crt文件格式不正确。 最后一项显示如下:

 -----BEGIN CERTIFICATE----- MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE----- 

-----END CERTIFICATE-----之前添加一个换行符后,curl能够处理证书文件。

这是非常烦人的,因为我的update-ca-certificates命令没有给我任何警告。

这可能是也可能不是curl的版本特定问题,所以这里是我的版本,只是为了完整:

 curl --version # curl 7.51.0 (x86_64-alpine-linux-musl) libcurl/7.51.0 OpenSSL/1.0.2j zlib/1.2.8 libssh2/1.7.0 # Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp # Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 

在git bash中运行以下命令,对我来说工作正常

 git config --global http.sslverify "false" 

错误是由于PKI目录中的SSL链证书文件损坏或丢失。 您需要确保文件encryption包,按照以下步骤:在您的控制台/terminal:

 mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates 

进入这个网站: https : //rpmfind.net/linux/rpm2html/search.php? query = ca-certificates,得到你的证书,为SO。 复制url下载并粘贴到url:wget your_url_donwload_ca-ceritificated.rpm现在,安装你rpm:

 rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv 

现在重新启动你的服务:我的例子这个命令:

 sudo service2 httpd restart 

我有同样的问题。

那是我的错误

错误设置ce
rtificatevalidation位置:CAfile:D:/git_repo/mingw32/ssl/certs/ca-bundle.crt CApath:无

它对我来说工作正常

我将git安装目录名称重命名为git_repo “。

固定对我:

curl –remote-name –time-cond cacert.pem \ https://curl.haxx.se/ca/cacert.pem