題:
如何修復curl:(60)SSL證書:使用sudo時無效的證書鏈
Jacob Tomlinson
2014-02-21 22:36:26 UTC
view on stackexchange narkive permalink

因此,由於Mavericks升級curl的證書存在更多問題。

當嘗試使用自簽名證書捲曲我的Web服務器中的文件時,收到錯誤消息“ SSL證書:無效的證書鏈” “。

此問題已通過將證書添加到系統鑰匙串並將其設置為始終允許SSL(已在此處此處找到的信息)進行了糾正。 / p>

這可以正常工作,並且當我捲曲文件時可以正確下載。

但是,如果我之前使用sudo運行curl(例如,我有一個腳本需要使用sudo運行,並執行捲曲),然後返回相同的錯誤消息。

我猜想root可能沒有從系統鑰匙串中讀取?

有人知道一種方法嗎?解決這個問題?

六 答案:
Dan
2014-02-28 17:46:39 UTC
view on stackexchange narkive permalink

如果將CA證書存儲在文件系統(PEM格式)中,則可以告訴curl將其與

  sudo curl --cacert /path/to/cacert.pem一起使用。 。 

您也可以使用

  sudo curl --insecure ...  

關閉證書驗證。 編輯:已更新反饋信息

如果要永久設置此設置,則應創建一個 .curlrc 文件並將其放置在主目錄中。 sudo 命令可能需要 / var / root 中的此文件。該文件具有與命令行相同的選項,但沒有破折號。每行一個選項:

  cacert = / path / to / my / certs.pem  
感謝您的回答,使用sudo運行的腳本來自第三方,因此我無法真正修改curl命令本身。不安全實際上不是一種選擇。可以在全球範圍內完成嗎?
您可以製作一個.curlrc文件並將其存儲在主文件夾中,儘管使用sudo可能需要將其存儲為/var/root/.curlrc。該文件應包含不帶破折號的選項,每行一個。因此,“ cacert = / path / to / my / certs.pem”
+1用於設置`root`可用的.curlrc`而不是`--insecure`。確切地說,對於處於網絡位置的攻擊者而言,這樣做對於MITM和注入代碼而言是微不足道的。
謝謝,聽起來像我要找的東西。明天我會嘗試的,如果可行的話,獎勵賞金。
Wes Campaigne
2014-03-02 07:38:10 UTC
view on stackexchange narkive permalink

根不會從當前的用戶信任設置中讀取,但是同時有管理員信任設置和特定於根用戶的信任設置。 (這些也與 system 信任設置不同。)此外,證書信任設置與將證書添加到鑰匙串有些不同。您可以在不完全添加證書的情況下將其標記為受信任的證書。 (這裡的確切情況對我來說還不清楚,而且我所看到的文檔尚不明確。)

您可以將證書標記為當前用戶信任的證書,

  $ security add-trusted-cert /path/to/cert.pem 

,但這對root沒有幫助。您可能現在猜到了,解決方案是對上面的 sudo 進行標記,然後將其標記為對根用戶特別信任:

  $ sudo security add- Trusted-cert /path/to/cert.pem 

,或使用 -d 標誌將其添加到管理員信任設置中:

  $安全性add-trusted-cert -d /path/to/cert.pem

(OS X會彈出一個密碼對話框來確認這一點。)

後兩者中的任何一個似乎對於 sudo curl 都是足夠的。

參考: https://developer.apple.com/library/mac /Documentation/Darwin/Reference/ManPages/man1/security.1.html

正如我在問題中所說的,我已經將它們添加到系統鑰匙串以及登錄鑰匙串中了。
您實際上嘗試了我的建議嗎?我在您所描述的確切情況下進行了測試,並且可以正常工作。我不清楚所有細節-文檔含糊-但是您應該知道證書信任設置與僅將證書添加到證書並不完全相同。鑰匙串,並且管理員證書信任設置與系統和用戶設置/鑰匙串分開存在。 (在組合中似乎還存在一組特定於root用戶的用戶設置。)我已經編輯了我的答案,以便在這一點上更加清楚。請嘗試此解決方案。
是的,當您第一次發布該解決方案時,我已經嘗試過了。證書位於系統鑰匙串中,並設置為受信任。仍然沒有運氣。
zinking
2014-09-19 09:35:23 UTC
view on stackexchange narkive permalink

這確實在輸出提示中:

 迴聲不安全的>>〜/ .curlrc  

使用上述解決方案的優點是它適用於所有 curl 命令,但不建議使用,因為它可能通過連接到不安全且不受信任的主機來引入 MITM攻擊

neverpanic
2014-03-04 07:14:39 UTC
view on stackexchange narkive permalink

如果您使用MacPorts(並且您提到的第3方腳本不會將其從 $ PATH 中刪除或調用 / usr / bin / curl ),則可以安裝 certsync curl 端口按此順序。

certsync 是一個工具和相應的已啟動plist,它將導出您的系統鑰匙串到 $ prefix / etc / openssl / cert.pem 並安裝符號鏈接 $ prefix / share / curl / curl-ca-bundle.crt -> $ prefix / etc / openssl / cert.pem ,因此MacPorts curl將自動獲取證書。更改系統鑰匙串時, certsync 還將自動更新生成的文件。

謝謝您的幫助,我盡可能避免使用MacPorts。
Fabian Frank
2014-04-23 04:26:49 UTC
view on stackexchange narkive permalink

您要查找的文檔在這裡。它說明瞭如何在Mavericks上使用cURL以及如何提供證書: http://curl.haxx.se/mail/archive-2013-10/0036.html

Alexander Klimetschek
2016-11-30 06:55:22 UTC
view on stackexchange narkive permalink

要使 sudo curl (在OSX Sierra上)正常工作,我們必須將證書導入到 System.keychain 中並在此信任它。這可以在“鑰匙串”應用中手動完成,也可以使用以下命令完成:

  sudo安全性add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem
 

同時指定 -d 和通過 -k 手動設置系統鑰匙串的路徑很重要,以確保證書確實導入到那裡。還沒有。

該命令無需 sudo 即可運行,但隨後會通過UI對話框詢問密碼,這可能是腳本的障礙。

我收到錯誤消息“ SecCertificateCreateFromData:導入中的未知格式”。
無論誰投票否決,請知道我清楚地寫了“在OSX Sierra上”,這對我們來說是一個可行的解決方案。如果它在較新的OSX版本中不起作用,則可能是因為OSX支持或工具已更改。或類似上一個註釋程序的問題,其中輸入文件的格式不受支持(問題未指定該格式)。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...