在哪里为cURL提供证书cacert.pem?

Dou*_*las 7 curl ssl-certificate rvm

我正在尝试在Debian服务器上更新rvm:

rvm get stable
Run Code Online (Sandbox Code Playgroud)

但是我得到了以下错误:

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here : http://curl.haxx.se/docs/sslcerts.html
Run Code Online (Sandbox Code Playgroud)

我大约5个月前安装了这台服务器,一切正常,但似乎https://rvm.io证书上的内容有所改变

所以我设法下载了一个新的捆绑证书(我的用户目录中的cacert.pem):

wget http://curl.haxx.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)

并且正如官方文档所述尝试不同的命令,但是可以使用证书文件的选项:

\curl --cacert ./cacert.pem -L https://get.rvm.io | bash -s stable # update to stable
Run Code Online (Sandbox Code Playgroud)

事情有点向前发展.不幸的是,rvm在安装过程中再次运行卷曲,我再次遇到同样的错误.

所以我想知道在哪里放置我的cacert.pem文件来替换cURL使用的文件?

我尝试了其他技术:创建一个包含cacert =〜/ cacert.pem的.curlrc文件,但是我收到一个错误:CAfile:cacert.pem CApath:/ etc/ssl/certs

所以我尝试在/usr/share/ca-certificates/cacert.org中复制我的cacert.pem并在/ etc/ssl/certs中创建一个指向/usr/share/ca-certificates/cacert.org/的sym链接cacert.pem

但是,当我

rvm get stable
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here : http://curl.haxx.se/docs/sslcerts.html
Run Code Online (Sandbox Code Playgroud)

我也试过这个,但没有不同的结果:

sudo update-ca-certificates -f
Run Code Online (Sandbox Code Playgroud)

所以我想知道在哪里放我的cacert.pem文件?

Dou*_*las 5

好的,我设法让它工作,但我对我的解决方案不太满意。

\n\n

我犯的第一个错误是 .curlrc 文件中的指令不正确。\n我们应该像为“curl”命令指定选项一样使用此文件。\n所以我删除了“等号”:

\n\n
cacert /home/user_me/cacert.pem\n
Run Code Online (Sandbox Code Playgroud)\n\n

这样我就可以使命令的第一部分起作用:

\n\n
\\curl -L https://get.rvm.io | bash -s stable\n
Run Code Online (Sandbox Code Playgroud)\n\n

bash 部分仍然失败,因为 rvm 在根模式下再次使用curl。

\n\n

所以我也将.curlrc文件复制到/root中文件夹中。

\n\n

它起作用了!\n我什至可以调用标准 rvm 命令:

\n\n
rvm get stable\n
Run Code Online (Sandbox Code Playgroud)\n\n

但这有点棘手,我更希望curl 使用我的cacert.pem 文件而不使用所有这些.curlrc 文件。

\n\n

谷歌搜索更多,我在这里这里找到了一些有用的信息找到了一些有用的信息。\n第一个参考有一个小错误:\n当我阅读“sudo update-ca-certificates --fresh”命令的手册页时,我意识到这个人正在把他的文件在错误的地方。

\n\n

您必须将证书放入/usr/share/ca-certificates文件夹而不是 /usr/local/share/ca-certificates ,然后将证书行附加到配置文件/etc/ca-certificates.conf(例如,\xe2\x80\x9cmy_ca.crt\xe2\x80\x9c)。\n然后您可以运行“sudo update-ca-certificates --fresh”命令。

\n\n

注意:如果将证书复制到/usr/local/share/ca-certificates,则无需再修改 /etc/ca-certificates.conf 配置文件,也无需运行“sudo update-ca -certificates --fresh”命令。

\n\n

但是就我而言,对于第一个解决方案(/usr/share/ca-certificates),当我运行“sudo update-ca-certificates --fresh”命令时出现错误。\n作为第二个解决方案,我尝试将我的证书放入 /usr/local/share/ca-certificates。但这没有用。

\n\n

所以我放弃了,保留了两个 .curlrc 文件。

\n\n

因此,如果有人能指出我做错了什么,我将非常感激。

\n

  • 当然,但使用证书的目标是确保安全。如果使用“-k”参数。您将允许不安全的 SSL 连接。手册页摘录:**-k, --insecure (SSL) 此选项明确允许curl 执行“不安全”的 SSL 连接和传输。** (2认同)
  • 是的,但如果您关心的只是完成它(我认为适用于大多数人),-k 是一个选项。 (2认同)