[英]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 中添加證書。
腳步
最后檢查狀態。 請注意在編輯之前備份 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 驗證關閉時,可能會受到中間人攻擊。
將以上所有答案的摘要完全詳細地列出來。
出現此問題是因為如果您嘗試訪問的存儲庫存在,git 無法完成與 git 服務器的 https 握手。
從 github 服務器獲取證書的步驟
將證書添加到本地 git 證書存儲的步驟
現在打開您保存在記事本中的證書並復制內容以及--Begin Certificate--和--end certificate--
要查找為您的 git 存儲所有證書的路徑,請在 cmd 中執行以下命令。
git 配置 -- 列表
檢查鍵“http.sslcainfo”,對應的值為路徑。
注意:如果您找不到密鑰 http.sslcainfo,請檢查 Git 的默認路徑:C:\Program Files\Git\mingw64\ssl\certs
注意1:以管理員模式打開此文件,否則更新后將無法保存。 (提示 - 您可以為此目的使用 Notepad++)
注意 2:修改此文件之前,請在別處進行備份。
我剛剛遇到了同樣的問題,但在 Windows 上使用 sourcetree 與 Windows 上的普通 GIT 相同的步驟也是如此。 按照以下步驟,我能夠解決此問題。
這應該可以解決您使用自簽名證書和使用 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 中解決了這個問題
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
文件。 通常在目錄~/.gitcongh
。
添加或覆蓋下一行:
[http]
sslverify = false
執行以下命令。
git config --global http.sslverify false
如果您不想全局啟用配置屬性,請踩到您的存儲庫路徑,然后執行。
git config http.sslverify false
解決了我的問題 git config --global http.sslBackend schannel
C:\Program Files\Git\bin
和C:\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 步開始閱讀)
轉到遠程存儲庫的站點。 例如:github.com、bitbucket.org、tfs.example...
單擊左上角的鎖定圖標,然后單擊證書。
轉到證書路徑選項卡並雙擊.. 根證書
轉到詳細信息選項卡,然后單擊復制到文件。
將證書導出/復制到您想要的任何地方。 例如:C:\certs\example.cer
在本地存儲庫文件夾中打開 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)時,可能會出現“推送失敗”錯誤。
.git
文件夾config
文件 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 文件。
右鍵單擊它並 select Install Certificate
。 將出現“證書導入向導”。 Select Local Machine
。 按Next
,確認。
Select Place all certificates in the following store
中,按Browse
和 select Trusted Root Certification Authorities
, OK
, Finish
。
您還可以檢查其他應用程序是否可以獲取、拉取或推送數據。 例如,在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.