在尝试访问HTTPS网址时如何使用cURL处理证书?

时间:2010-07-01 19:08:33

标签: api curl https

我使用curl收到以下错误:

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

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

28 个答案:

答案 0 :(得分:142)

我还安装了最新版本的ca-certificates,但仍然收到错误:

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

问题是卷曲期望证书位于路径/etc/pki/tls/certs/ca-bundle.crt但找不到它,因为它位于路径/etc/ssl/certs/ca-certificates.crt

运行

将我的证书复制到预期目的地
sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

为我工作。如果目标目标不存在,则需要为目标目标创建文件夹

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

如果需要,修改上面的命令,使目标文件名与curl预期的路径匹配,即将/etc/pki/tls/certs/ca-bundle.crt替换为" CAfile后面的路径:"在您的错误消息中。

答案 1 :(得分:78)

将其放入.bashrc

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

(见Robert的评论)

答案 2 :(得分:64)

此错误与缺少包ca-certificates有关。安装它。

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

# apt-get install ca-certificates

通过Apt-Cyg

在CygWin中
# apt-cyg install ca-certificates

在Arch Linux(Raspberry Pi)中

# pacman -S ca-certificates

文件说明:

  

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

见:Debian -- Details of package ca-certificates in squeeze

答案 3 :(得分:28)

使用以下内容创建文件~/.curlrc

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

答案 4 :(得分:18)

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

请注意,这可能意味着您没有与您认为自己所在的终端进行通信,因为他们提供的证书未经您信任的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。和ca证书。

答案 5 :(得分:12)

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

解决方法是使用默认的系统卷曲和避免弄乱前面的Anaconda PATH变量。你可以

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

  2. 删除Anaconda curl
    conda remove curl

  3. $ which curl /usr/bin/curl

    [0] Anaconda Ubuntu卷曲Github问题 https://github.com/conda/conda-recipes/issues/352

答案 6 :(得分:10)

来自$ 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.

答案 7 :(得分:6)

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

echo insecure >> ~/.curlrc

答案 8 :(得分:5)

这对我有用

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文件夹:使用chmod 777 -R folderNAME创建一个并更改权限

答案 9 :(得分:5)

对于在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并将其放在\ xampp路径下(我无法使curl.capath工作)。我还发现cURL站点上的CAbundle对于我连接的远程站点来说还不够,所以使用了http://winampplugins.co.uk/curl/

上预编译的Windows版本卷曲7.47.1的列表。

答案 10 :(得分:4)

curl默认执行SSL证书验证,使用&#34;捆绑&#34;  Certificate Authority (CA)个公钥(CA证书)。默认  bundle名为curl-ca-bundle.crt;您可以指定备用文件  使用--cacert选项。

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

如果您想关闭curl对证书的验证,请使用  -k(或--insecure)选项。

例如

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

答案 11 :(得分:4)

您的curl似乎指向具有CA证书或类似信息的不存在的文件。

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

答案 12 :(得分:2)

我遇到了完全相同的问题。事实证明,我的Prototype文件格式不正确。最后一个条目显示如下:

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

-----BEGIN CERTIFICATE----- MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE----- 之前添加换行符后,curl能够处理证书文件。

由于我的-----END CERTIFICATE-----命令没有给我任何警告,所以非常讨厌。

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

update-ca-certificates

答案 13 :(得分:2)

对于它的价值,检查which curl正在运行也很重要。

我维护的共享计算机上的用户遇到此错误。但事实证明是因为他们安装了Anaconda(http://continuum.io)。这样做会将Anaconda的二进制路径放在标准$PATH之前,它带有自己的curl二进制文件,无法找到在此Ubuntu计算机上安装 的默认证书。

答案 14 :(得分:1)

在git bash中运行以下命令,对我来说很好用

{{1}}

答案 15 :(得分:1)

如果您在macOS上使用自制软件,或者在Linux中使用linuxbrew,请尝试按照this page中的以下步骤重新安装opensslcurl

  

此错误消息表示curl无法使用openssl建立安全连接。重新安装openssl应该可以解决此问题。要临时使用curl和git的不安全连接来下载任何必要的文件,请运行:

echo insecure >> ~/.curlrc
git config --global http.sslVerify false
  

然后,安装或重新安装openssl和curl:

HOMEBREW_CURLRC=1 brew reinstall openssl curl
  

最后,撤消安全性更改以使curl和git再次使用安全连接:

sed -i '/^insecure$/d' ~/.curlrc
git config --global http.sslVerify true

您可能需要启动一个新的Shell会话以使用来验证结果

curl -v https://github.com # or any other https urls.

如果在输出中显示以下输出,则应解决该问题!

* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
    CApath: /usr/local/etc/openssl/certs

参考文献:

答案 16 :(得分:1)

只需创建系统中缺少的文件夹即可。

  

/ etc / pki / tls / certs /

并使用以下命令创建文件

  

sudo apt-get install ca-certificates

,然后将证书复制并粘贴到目标文件夹中,该文件夹将显示在您的错误中。我的身份是“ with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in”,请确保将文件粘贴到错误中提到的确切位置。使用以下命令复制粘贴。

  

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

固定。

答案 17 :(得分:0)

错误是由于PKI目录中的SSL链证书文件损坏或丢失。 您需要确保文件ca-bundle,遵循以下步骤: 在您的控制台/终端中:

function Foo2() { }

Foo2.prototype.test = function() {
    console.log('i\'m working!');
};

module.exports = Foo2;

输入此网站:https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates,获取您的ca证书,以获取结果。 复制下载的网址并粘贴到网址:     wget your_url_donwload_ca-ceritificated.rpm 现在,安装你的rpm:

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

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

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

答案 18 :(得分:0)

这对我来说很明确:

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

答案 19 :(得分:0)

我发现此修复程序是一种简单且安全的修复程序。 它仅涉及更改php.ini文件中两个值的路径。 请按照以下说明进行操作: https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate

答案 20 :(得分:0)

下面介绍解决问题的步骤。
1.找出定义网址上存在的文件。
2.如果没有,则从URL下载文件。 https://curl.haxx.se/ca/cacert.pem
3.将文件复制并粘贴到php.ini文件的定义路径中。
4.重新启动apache服务。

答案 21 :(得分:0)

我遇到了这个问题,结果证明我的CURL版本无法解析DER编码的证书(也没有注意--cert-type选项)。当我将证书转换为PEM格式时,它起作用了。

答案 22 :(得分:0)

我遇到了同样的问题:我正在构建一个基于高山的docker映像,并且当我想卷曲到组织的网站时,会出现此错误。要解决它,我必须获得我公司的CA证书,然后,必须将其添加到我图像的CA证书中。

获取CA证书

使用OpenSSL获取与网站相关的证书:

mvn compile

这将输出类似:

openssl s_client -showcerts -servername my.company.website.org -connect my.company.website.org:443

获取最后一个证书(CONNECTED(00000005) depth=2 CN = UbisoftRootCA verify error:num=19:self signed certificate in certificate chain ... -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- ...
之间的内容 -----BEGIN CERTIFICATE-----标记)并将其保存到文件中(例如,mycompanyRootCA.crt)

建立您的形象

然后,当您从alpine构建您的docker映像时,请执行以下操作:

-----END CERTIFICATE-----

您的图像现在将正常工作! \ o /

答案 23 :(得分:0)

如果仍有问题,请尝试此操作,它对我有用 删除您的/etc/ssl/certs/目录中的文件 然后重新安装ca证书sudo apt install ca-certificates --reinstall 当我尝试安装Linuxbrew时是这样做的

答案 24 :(得分:0)

只是发现此解决方案对我来说是完美的。

echo 'cacert=/etc/ssl/certs/ca-certificates.crt' > ~/.curlrc

我从here

找到了这个解决方案

答案 25 :(得分:0)

我也有这个问题。我的问题是这个文件:

/usr/ssl/certs/ca-bundle.crt

默认情况下只是一个空文件。因此,即使存在,您仍然可以 错误,因为它不包含任何证书。您可以这样生成它们:

p11-kit extract --overwrite --format pem-bundle /usr/ssl/certs/ca-bundle.crt

https://github.com/msys2/MSYS2-packages/blob/master/ca-certificates/ca-certificates.install

答案 26 :(得分:0)

我使用 MobaXterm,实习生使用 Cygwin,因此即使在使用 ca-certificates 安装 apt-cyg install ca-certificates 后问题也没有解决。

我仍然收到以下错误:

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

然后我尝试列出文件 /etc/ssl/certs/ca-certificates.crt 但我找不到它。但是,我可以找到带有所有标准 CA 证书的 /usr/ssl/certs/ca-bundle.crt,因此我将文件 /usr/ssl/certs/ca-bundle.crt 复制为 /etc/ssl/certs/ca-certificates.crt 并解决了问题。

答案 27 :(得分:-1)

我遇到了同样的问题。

这是我的错误

@SpringBootApplication

对我来说很好用

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