簡體   English   中英

無法使用自簽名證書在 Windows 上使用 git 解決“無法獲取本地頒發者證書”

[英]Unable to resolve "unable to get local issuer certificate" using git on Windows with self-signed certificate

我在 Windows 上使用 Git。我安裝了 msysGit package。我的測試存儲庫在服務器上有一個自簽名證書。 我可以使用 HTTP 毫無問題地訪問和使用存儲庫。 移動到 HTTPS 給出錯誤:

SSL 證書問題:無法獲取本地頒發者證書。

我在 Windows 7 客戶端計算機的受信任的根證書頒發機構中安裝了自簽名證書。 我可以在 Inte.net Explorer 中瀏覽到 HTTPS 存儲庫 URL,沒有任何錯誤消息。

Philip Kelley 的這篇博文解釋了 cURL 不使用客戶端機器的證書存儲。 我按照博文的建議創建了curl-ca-bundle.crt的私有副本並配置 Git 以使用它。 我確定 Git 正在使用我的副本。 如果我重命名副本; Git 抱怨文件丟失。

我粘貼了我的證書,如博文中所述,我仍然收到消息“無法獲得本地頒發者證書”。

我通過 HTTPS 克隆了一個 GitHub 存儲庫,驗證了 Git 仍在工作。

我看到的唯一與博客文章不同的是我的證書根證書——沒有鏈可以到達它。 我的證書最初來自單擊 IIS8 IIS 管理器鏈接“創建自簽名證書”。 也許這使得證書在某種程度上與 cURL 所期望的有所不同。

如何讓 Git/cURL 接受自簽名證書?

問題是 git 默認使用“Linux”加密后端。

從 Git for Windows 2.14 開始,您現在可以將 Git 配置為使用 SChannel,即內置的 Windows 網絡層作為加密后端。 這意味着它將使用 Windows 證書存儲機制,您無需顯式配置 curl CA 存儲機制: https ://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs .85).aspx

只需執行:

git config --global http.sslbackend schannel

那應該有幫助。

在為 Windows 安裝 git 時,現在使用 schannel 是標准設置,此外,如果可能,建議不要再通過 SSH 簽出存儲庫,因為 https 更容易配置並且不太可能被防火牆阻止,這意味着失敗的機會更小。

如果要完全禁用 SSL 驗證,請打開 Git Bash 並運行命令。

git config --global http.sslVerify false

注意:此解決方案使您面臨諸如中間人攻擊之類的攻擊 因此盡快再次開啟驗證:

git config --global http.sslVerify true

我也有這個問題。 就我而言,我試圖獲得一個接收后 Git 掛鈎,以便在每次推送時更新服務器上的工作副本。 嘗試按照您鏈接到的博客中的說明進行操作。 對我也不起作用,並且基於每個用戶覆蓋設置似乎也不起作用。

我最終不得不做的是禁用整個 Git 的 SSL 驗證(如文章所述)。 不是完美的解決方案,但在我找到更好的解決方案之前它會起作用。

我編輯了位於:

C:\Program 文件 (x86)\Git\etc\gitconfig

在 [http] 塊中,我添加了一個禁用 sslVerify 的選項。 當我完成時它看起來像這樣:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

那成功了。

筆記:

  • 這會禁用 SSL 驗證,不建議將其作為長期解決方案。

  • 您可以禁用這個仍然不是很好的每個存儲庫,但會本地化設置。

  • 隨着 LetsEncrypt.org 的出現,現在可以相當簡單、自動化且免費地設置 SSL 作為自簽名證書的替代方案,並且無需關閉 sslVerify。

Kiddailey我認為非常接近,但是我不會禁用 ssl 驗證,而只是提供本地證書:

在 Git 配置文件中

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

或通過命令行:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

我也遇到過這個問題。 最后通過從這個 MSDN Blog獲得指導得到了解決。

更新

實際上,您需要在 Git\bin 目錄中的 git 證書文件 curl-ca-bundel.cert 中添加證書。

腳步

  1. 在瀏覽器中打開您的 github 頁面,然后單擊地址欄中的鎖定圖標。
  2. 在打開的小彈出窗口中導航到“查看證書”鏈接,它將打開一個彈出窗口。
  3. 在其中導航到證書選項卡(在我的例子中是第三個)。 選擇作為根證書的頂部節點。 然后按底部的復制證書按鈕並保存文件。
  4. 在文件資源管理器中導航 Git\bin 目錄並在文本編輯器中打開 curl-ca-bundle.crt。
  5. 也在文本編輯器中打開導出的證書文件(在步驟 3 中)。
  6. 將導出證書中的所有內容復制到 curl-ca-bundle.crt 的末尾,並保存。

最后檢查狀態。 請注意在編輯之前備份 curl-ca-bundle.crt 文件以保持安全。

使用 makecert 進行開發 SSL回答為我解決了這個問題。

我不知道為什么,但是由 IIS 管理器中簡單的“創建自簽名證書”鏈接創建的證書並不能解決問題。 我遵循了創建和安裝自簽名 CA Root 的鏈接問題中的方法; 然后使用它為我的服務器頒發服務器身份驗證證書。 我將它們都安裝在 IIS 中。

這使我的情況與原始問題中引用的博客文章相同。 一旦根證書被復制/粘貼到 curl-ca-bundle.crt 中,git/curl 組合就滿足了。

為避免完全禁用 ssl 驗證或復制/破解 git 使用的捆綁 CA 證書文件,您可以將主機的證書鏈導出到文件中,並讓 git 使用它:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

如果這不起作用,您可以僅為主機禁用 ssl 驗證:

git config --global http.https://the.host.com/.sslVerify false

注意:當 ssl 驗證關閉時,可能會受到中間人攻擊。

如果是github 存儲庫(或任何非自簽名證書) ,在安裝 Git-on-windows 時選擇下面的選項,可以解決問題。

在此處輸入圖像描述

將以上所有答案的摘要完全詳細地列出來。

原因

出現此問題是因為如果您嘗試訪問的存儲庫存在,git 無法完成與 git 服務器的 https 握手。

解決方案

從 github 服務器獲取證書的步驟

  1. 在瀏覽器中打開你要訪問的github
  2. 按地址欄中的鎖定圖標>單擊“證書”
  3. 轉到“證書路徑”選項卡 > 選擇證書層次結構中最頂層的節點 > 單擊“查看證書”
  4. 現在單擊“詳細信息”並單擊“復制到文件..”> 單擊“下一步”> 選擇“Base 64 編碼 X509 (.CER)”> 將其保存到任何所需的路徑。

將證書添加到本地 git 證書存儲的步驟

  1. 現在打開您保存在記事本中的證書並復制內容以及--Begin Certificate--和--end certificate--

  2. 要查找為您的 git 存儲所有證書的路徑,請在 cmd 中執行以下命令。

    git 配置 -- 列表

  3. 檢查鍵“http.sslcainfo”,對應的值為路徑。

注意:如果您找不到密鑰 http.sslcainfo,請檢查 Git 的默認路徑:C:\Program Files\Git\mingw64\ssl\certs

  1. 現在打開該路徑中的“ca-bundle.crt”。

注意1:以管理員模式打開此文件,否則更新后將無法保存。 (提示 - 您可以為此目的使用 Notepad++)

注意 2:修改此文件之前,請在別處進行備份。

  1. 現在將步驟 1 中提到的文件的內容復制到步驟 4 中的文件末尾文件中,就像其他證書放在 ca-bundle.crt 中的方式一樣。
  2. 現在打開一個新終端,現在您應該能夠使用 https 執行與 git 服務器相關的操作。

我剛剛遇到了同樣的問題,但在 Windows 上使用 sourcetree 與 Windows 上的普通 GIT 相同的步驟也是如此。 按照以下步驟,我能夠解決此問題。

  1. 獲取服務器證書樹這可以使用 chrome 完成。 導航到服務器地址。 單擊掛鎖圖標並查看證書。 將所有證書鏈導出為 base64 編碼文件 (PEM) 格式。
  2. 將證書添加到您的 GIT 信任配置文件的信任鏈中運行“git config --list”。 找到“http.sslcainfo”配置,這顯示了證書信任文件的位置。 將所有證書復制到信任鏈文件中,包括“- -BEGIN- -”和“- -END- -”。
  3. 確保將整個證書鏈添加到證書文件

這應該可以解決您使用自簽名證書和使用 GIT 的問題。

我嘗試使用“http.sslcapath”配置,但這不起作用。 此外,如果我沒有在證書文件中包含整個鏈,那么這也會失敗。 如果有人對這些有指示,請告訴我,因為必須重復上述操作才能進行新安裝。

如果這是系統 GIT,那么您可以使用 TOOLS -> options GIt 選項卡中的選項來使用系統 GIT,這也解決了 sourcetree 中的問題。

我之前也遇到過這個問題,用下面的配置解決。

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

從 git 2.3.1 開始,你可以在 http 后面加上https://your.domain來表示下面的證書只給它。

2021 年 1 月 - 通過設置 Menu > Git > Settings > Git Global Settings > Cryptographic Network Provider > [Secure Channel] 而不是 [OpenSSL] 在 VS2019 中解決了這個問題

Git SSL 證書問題無法獲取本地頒發者證書(修復)

PS:不需要設置 --global 或 --local http.sslVerify false。 我正在克隆一個未使用任何自簽名證書的 Azure DevOps 存儲庫。這似乎是 VS2019 或 Git for Windows 的問題。他們需要修復它!

就我而言,因為我已經為 Window 7 安裝了ConEmu 終端,它會在安裝過程中在C:\Program Files\Git\mingw64\ssl\certs處創建ca-bundle

因此,我必須在終端上運行以下命令才能使其工作:

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

因此,我的C:\Program Files\Git\etc\gitconfig包含以下內容:

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

另外,我在安裝 Git 時選擇了與此處提到的相同的選項。

希望有幫助!

git config --global http.sslVerify false

讓我感到困惑的一件事是路徑的格式(在我的 Windows PC 上)。 我最初有這個:

git config --global http.sslCAInfo C:\certs\cacert.pem

但這因“無法獲得本地頒發者證書”錯誤而失敗。

最終奏效的是:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

禁用您的 ssl 驗證(默認情況下啟用)。

通過“.gitconfig”文件

檢查您的.gitconfig文件。 通常在目錄~/.gitcongh

添加或覆蓋下一行:

[http]
   sslverify = false

通過“git config”命令

執行以下命令。

git config --global http.sslverify false

如果您不想全局啟用配置屬性,請踩到您的存儲庫路徑,然后執行。

git config http.sslverify false

解決了我的問題 git config --global http.sslBackend schannel

  1. 從此鏈接下載證書: https ://github.com/bagder/ca-bundle
  2. 將其添加到C:\Program Files\Git\binC:\Program Files\Git\mingw64\bin

然后嘗試類似: git clone https://github.com/heroku/node-js-getting-started.git

git config --global http.sslbackend secure-transport

(必須在更新到 Big Sюr 后這樣做)

修復特定錯誤SSL 證書問題:無法在 git 中獲取本地頒發者證書

我對 Let's Encrypt certificate 有同樣的問題。

我們只需要一個帶有 https 的網站:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

但 git pull 說:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

要修復它,我們還需要添加:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

就我而言,我不得不為不同的 git repositories使用不同的證書

請按照以下步驟操作(如果您有存儲庫的證書,則可以從第 5 步開始閱讀)

  1. 轉到遠程存儲庫的站點。 例如:github.com、bitbucket.org、tfs.example...

  2. 單擊左上角的鎖定圖標,然后單擊證書

  3. 轉到證書路徑選項卡並雙擊.. 根證書

  4. 轉到詳細信息選項卡,然后單擊復制到文件

  5. 將證書導出/復制到您想要的任何地方。 例如:C:\certs\example.cer

  6. 在本地存儲庫文件夾中打開 git bash 並鍵入:

    $ git config http.sslCAInfo "C:\certs\example.cer"

現在您可以為每個存儲庫使用不同的證書。

請記住,使用--global參數調用也會更改其他文件夾中 git 存儲庫的證書,因此在執行此命令時不應使用--global參數。

我在 Azure DevOps (Visual Studio) 中遇到了同樣的問題。 最后我決定使用SSH協議克隆我的 repo,因為我更喜歡它而不是禁用 SSL 驗證。

你只需要生成一個 SSH Key,你就可以這樣做... SSH 文檔

ssh-keygen

然后,在你的 git 主機(如 Azure Devops、Github、Bitbucket、Gitlab 等)上導入你的公鑰

使用 Visual Studio 時出現此錯誤。 當您在 Visual Studio 選項窗口中將加密網絡提供程序設置設置為 OpenSSL 時,會發生這種情況。 當我將設置更改為安全通道時,它為我解決了這個問題。 當我升級我的 VS 時,這個設置一定是為我設置的。

使用 Windows 時,問題在於 git 默認使用“Linux”加密后端。 從 Git for Windows 2.14 開始,您可以將 Git 配置為使用 SChannel,即內置的 Windows 網絡層作為加密后端。 為此,只需在 GIT 客戶端中運行以下命令:

git config --global http.sslbackend schannel

這意味着它將使用 Windows 證書存儲機制,您無需顯式配置 curl CA 存儲(http.sslCAInfo)機制。

這對我有用。 我打開 cmd 行並運行以下命令。 並再次拉動。

git config --global http.sslVerify false

錯誤

推送失敗
致命:無法訪問
SSL 證書問題:無法獲取本地頒發者證書

原因

在本地機器上提交文件后,當本地 Git 連接參數過時(例如 HTTP 更改為 HTTPS)時,可能會出現“推送失敗”錯誤。

解決方案

  1. 打開本地目錄根目錄下的.git文件夾
  2. 在代碼編輯器或文本編輯器(VS Code、記事本、Textpad)中打開config文件
  3. 將文件中的HTTP 鏈接替換為相應 Git 存儲庫的網頁中可用的最新HTTPSSSH鏈接(克隆按鈕)
    例子:
     url = http://git.[host]/[group/project/repo_name] (actual path)
    將其替換為
    url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH) url = https://git.[host]/[group/project/repo_name] (new path HTTPS)

我已經嘗試了這里提到的所有方法,但沒有任何運氣。 最后我找到了一種不同的方法我所做的是

  • 在我的系統上為 git repo 生成了 ssh 公鑰/私鑰

  • 將 ssh 密鑰復制到您的 git 帳戶並在 git clone 中使用 ssh 而不是 https。檢查以下步驟以生成 ssh 密鑰

打開 Git Bash。

粘貼下面的文本,替換為您的 GitHub 電子郵件地址。

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

這將創建一個新的 ssh 密鑰,使用提供的電子郵件作為標簽。

生成公鑰/私鑰 rsa 密鑰對。 當系統提示您“輸入要保存密鑰的文件”時,按 Enter。 這接受默認文件位置。

輸入要保存密鑰的文件 (/c/Users/you/.ssh/id_rsa):[按 Enter]

我通過在 ${HOME}/.gitconfig 文件中添加以下條目解決了這個問題

[遙遠的“起源”]

代理=

在大多數情況下,它會在您的機器中啟用代理時發生,因此上述條目將解決此問題。

You might have a DNS issue and not a certificate issue, so before you disable SSL verification in your Git shell you should rule out a DNS problem. 諸如此類的案例已在https-issues-possibly-related-to-dns等問答論壇中提及。 如果您在 Windows 上使用 WSL 作為終端,那么您可以嘗試運行sudo echo nameserver 8.8.8.8 > /etc/resolv.conf然后發出 git 命令以查看是否有所不同。 這似乎不是永久的 DNS 修復(僅持續終端會話的生命周期),但它可以幫助您確定它是否是 DNS 問題而不是證書問題。 您還可以查看有關配置網絡以使用公共 DNS 的文檔 同樣,這只是為了幫助您確定您的 DNS 設置是否可能需要調整以幫助解決證書問題。

我嘗試了以下並且它有效

git config --global http.sslVerify false

下載並安裝本地證書。 可能它發布在您的公司網站上。 例如,*.cer 文件。

  1. 右鍵單擊它並 select Install Certificate 將出現“證書導入向導”。 Select Local Machine Next ,確認。

  2. Select Place all certificates in the following store中,按Browse和 select Trusted Root Certification AuthoritiesOKFinish

在此處輸入圖像描述

您還可以檢查其他應用程序是否可以獲取、拉取或推送數據。 例如,在Android Studio或可能的IDEA中,您應該在Settings此復選框中設置 select: Use credential helper

嘗試“克隆”項目時出現此錯誤。 一種解決方法是只使用網頁上的“下載為 zip”,對我來說,這實現了我想做的事情。

這可能會幫助一些遇到此錯誤的人。 如果您正在使用 VPN 並且它斷開連接,您也可能會收到此錯誤。 簡單的解決方法是重新連接您的 VPN。

在運行 composer update/install 之前使用這個命令:

git config --global http.sslverify false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM