如何在 Ubuntu 14.04 中使用 Curl 修復 CA 憑證問題?

如何在 Ubuntu 14.04 中使用 Curl 修復 CA 憑證問題?

我使用的是 Ubuntu 14.04。當我使用curl時,出現以下錯誤:

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

根據我從谷歌搜尋收集到的信息,它正在尋找的 CAfile 位置對於 Ubuntu 來說不正確(而且它不存在於我的電腦上),但它/etc/ssl/certs/ca-certificates.crt是正確的位置。

大多數解決方案涉及將環境變數設定CURL_CA_BUNDLE到正確的位置,或添加到我的主目錄中的cacert=/etc/ssl/certs/ca-certificates.crt(新建立的)檔案。.curlrc兩種方法我都試過了,都沒有完全解決問題。捲曲正在找到這個位置,但它仍然不起作用,給出錯誤:

curl: (60) SSL certificate problem: self signed certificate in certificate chain

我還嘗試在 Ubuntu 中卸載並重新安裝curl,並更新我的 CA 證書,以$ sudo update-ca-certificates --fresh更新證書,但仍然沒有使錯誤 60 消失。

我對 CA 憑證不太了解,並懷疑我過去故意添加了一些自簽名憑證。也許是偶然,我不知道。

有誰知道如何解決這個問題?有沒有辦法讓我的所有憑證真正重新開始?或者有人知道我如何弄清楚這個自簽名憑證在哪裡,然後如何刪除它?

PS:我不想使用 -k (又名 --insecure)標誌。我想讓這個安全地工作。

答案1

經過過去幾天的研究和工作後,我讓它發揮作用,答案最終相當簡單。

我需要在我的文件capath=/etc/ssl/certs/中設定。.curlrc

這使得curl 在命令列上工作。為了進一步讓curl在R中工作(我第一次遇到這個問題),我還需要cacert=/etc/ssl/certs/ca-certificates.crt在我的.curlrc文件中像之前嘗試過的那樣,否則它會繼續尋找/etc/pki/tls/certs/ca-bundle.crt

我仍然不知道為什麼會看到有關自簽名證書的錯誤。

根據其他一些隨機發現,我還從 Curl 網站下載了一份證書,其中包含:

sudo wget https://curl.se/ca/cacert.pem

進入同一certs目錄。指出cafile這一點也有效。最後我把它放回去ca-certificates.crt,它仍然有效。

我不明白為什麼會這樣或發生了什麼,但它已經解決了。

答案2

卡菲萊key 對我不起作用(curl 7.45.0),但 cacert (來自 --cacert 選項)可以。我的.curlrc文件:

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

答案3

經過幾次研究後,我讓它發揮作用,答案最終相當簡單。

開啟終端機ctrl++並更改alt工作t目錄:

 cd /etc/ssl/certs/

下載pem檔案到證書資料夾

 sudo wget https://curl.se/ca/cacert.pem 

現在開啟文件.curlrc

nano ~/.curlrc 

在開啟的文件中新增以下行

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

現在儲存檔案並使用curl 命令執行操作。

注意這裡我使用nano編輯器,但你可以使用任何編輯器。

答案4

我們在 Ubuntu 14.04.5 的 C++ 程式之一遇到了相同的問題。該.curlrc方法沒有生效。

ca-certificates.crt透過下載並在目錄下/etc/ssl/certs/ca-certificates.crt建立符號連結解決了這個問題。ca-bundle.crt/etc/pki/tls/certs/

希望這可以幫助!

相關內容