如何為命令列安裝證書

如何為命令列安裝證書

所以在學校我們需要安裝一個憑證來訪問https網站。在 Firefox 中,我可以匯入憑證。但是,我無法使用命令列執行此操作。例如,運行git push我得到:

fatal: unable to access 'https://github.com/user/repo': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

如何匯入憑證來刪除它?導入必須能夠為我進行身份驗證。另外,它是一個.cer文件,所以答案.crt不起作用。另外,我不需要關於如何設定 git 的步驟,因為我已經有了。我想知道是否可以這樣做。或者我可以完全使用git命令禁用身份驗證並使其忽略證書,例如答案這裡說?另外,我不想載入網頁,我已經設定了 Firefox 來載入網頁。我希望git push命令給出如下標準輸出:

[master 630d087] message
 1 file changed, 93 insertions(+), 80 deletions(-)
 rewrite somefile (84%)
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 978 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To https://github.com/User/Repo.git
   851ae39..630d087  master -> master

注意:我發現了它的git config --global http.sslverify false.但我希望看到一切的答案,而不僅僅是 git hack

答案1

長話短說

為了讓一切正常運作(而不僅僅是瀏覽器),您需要將該 CA 憑證新增至系統的受信任 CA 儲存庫。

在Ubuntu中:

  • 轉到/usr/local/share/ca-certificates/
  • 建立一個新資料夾,即“sudo mkdir school”
  • 將 .crt 檔案複製到 school 資料夾中
  • 確保權限正常(資料夾為755,檔案為644)
  • 執行“sudo update-ca-certificates”

為什麼

讓我也解釋一下發生了什麼,以便其他發文者了解為什麼他們不需要任何憑證即可透過 HTTPS 使用 Github。

發生的情況是,您的學校正在攔截所有 SSL 通信,可能是為了監控它們。

為此,他們所做的本質上是「中間人」攻擊,因此,您的瀏覽器會正確地抱怨它無法驗證 github 的憑證。你的學校代理正在取出 github 的證書,並提供自己的證書。

當您的瀏覽器嘗試根據簽署 github 證書的 CA 驗證學校提供的證書時,它理所當然會失敗。

因此,要使 SSL 連線在學校中發揮作用,您需要有意識地接受「MITM」攻擊。您可以透過將學校的 CA 證書新增為可信任證書來做到這一點。

當您信任該學校 CA 時,您對假 github 憑證的驗證就會起作用,因為假 github 憑證將由學校 CA 進行驗證。

請注意,SSL 連線不再安全,因為您的學校管理員將能夠攔截您的所有加密連線。

答案2

包裝ca-certificates內有說明README.Debian

如果您想要安裝本機憑證授權單位以隱式信任,請將憑證檔案.crt放入/usr/local/share/ca-certificates/並以 結尾的單一檔案重新執行 update-ca-certificates

請注意,它提到的目錄與此處的其他答案不同:

/usr/local/share/ca-certificates/

複製後,/usr/local/share/ca-certificates/您可以更新憑證的權限並sudo update-ca-certificates按照 Telegraphers 答案中所述運行。您將在輸出中看到證書已新增。

答案3

副檔名 .crt、.pem 和 .cer 是可以互換的,只需更改檔案副檔名即可,它們具有相同的形式。嘗試這個:

$ sudo cp mycert.cer /usr/share/ca-certificates/mycert.pem
$ sudo dpkg-reconfigure ca-certificates
$ sudo update-ca-certificates
$ git config --global http.sslCAInfo /usr/share/ca-certificates/mycert.pem

答案4

我使用以下以前答案的彙編:

sudo -i
echo | openssl s_client -showcerts -servername site.example.com -connect example.com:443 2>/dev/null | awk '/-----BEGIN CERTIFICATE-----/, /-----END CERTIFICATE-----/' >> /usr/local/share/ca-certificates/ca-certificates.crt 
update-ca-certificates

通常site.example.com, 和example.com都是相同的主機名稱。

相關內容