少數人會遇到的冷門問題,使用 Visual Studio 連上 Github 或自有 Git 伺服器時發生 SSL 憑證錯誤:

Git failed with a fatal error. unable to access '…': SSL certificate problem: unable to get local issuer certificate

可能原因有二:

  1. 網站連線時 SSL 憑證遭網管設備置換,Windows 已設定信任網管設備的 CA 根憑證,但 Git 因屬不同體系,拒絕承認置換憑證有效性
  2. 私有 Git 伺服器使用自己簽發的 SSL 憑證,其根憑證未被信任

針對這類情況,解決方法也有二種,第一種是停用憑證檢查(省事但不安全)、第二種則是讓 VS2007 Git 信任該憑證。

方法1 編輯 c:\Users\你的帳號\.gitconfig,加入

[http]
    sslVerify = false

如此 Git 工具將一律忽略憑證無效的問題,風險是萬一網路被惡意人士攔截竊聽,你也不會發現。

方法2 指定 Git 信任特定憑證

先將要信任的 CA 憑證匯出成 CER,格式請選「Base-64 編碼 X.509」

匯出的 CER 檔是個文字檔,格式為 -----BEGIN CERTIFICATE----- 與 -----END CERTIFICATE----- 間夾著一段 Base64 編碼碼。

找到 C:\Program Files\Git\usr\ssl\certs\ca-bundle.crt,將它複製到 c:\Users\你的帳號 目錄下,將 CER 裡的文字加在最後面:

最後,修改 c:\Users\你的帳號\.gitconfig,加上 sslCAInfo 指向我們修改過的 ca-bundle.crt。

大功告成!

【延伸閱讀】

【2019-04-23 更新】git 從 2.14 起支援使用 Window 憑證存放區,啟用方式 git config --global http.sslBackend schannel,詳見留言區。特此感謝 fredli 補充。


Comments

# by fredli

git從 2.14起,支援window的憑證存放區設定 啟用方式 git config --global http.sslBackend schannel 然後 .gitconfig就會多個像是這樣的東西 [http] sslBackend = schannel 參考 https://stackoverflow.com/questions/16668508/how-do-i-configure-git-to-trust-certificates-from-the-windows-certificate-store https://github.com/git-for-windows/git/releases/tag/v2.14.0.windows.1

# by Jeffrey

to fredli, 真是好消息,已補充於本文,感謝分享。

# by sueboy

啟用方式 git config --global http.sslBackend schannel 感謝~~

# by Grace

請問macbook內或app的模擬器遇到此問題該如何解?

# by Ho.Chun

請用如果直接複製一支 ca-bundle.crt 出來 如果之後將來 git 更新,git 本身去更新了自身的 ca-bundle.crt 怎麼辦 ?

Post a comment