
我使用的是 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/
希望這可以幫助!