Linux

Git 透過 HTTPS 連線失敗:server certificate verification failed 解決方式

介紹如何解決 git 透過 HTTPS 加密連線時所產生的憑證驗證失敗問題。

若使用 git 指令透過 https 的方式連線至 git 伺服器進行各種操作時,出現類似以下的連線錯誤:

fatal: unable to access 'https://your.host.com/team/proj.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

代表自己的電腦不信任簽屬 git 伺服器憑證的憑證頒發機構,有可能該憑證是自行簽署的,或是由其他沒有在 OS 內建名單中的機構所簽署。

設定 git 忽略 SSL 憑證檢查

解決這個問題的方法就是告訴自己的系統信任該憑證(如果它看起來沒有異常),若是在命令列中,可以先設定 GIT_SSL_NO_VERIFY 這個環境變數,這樣就可以讓 git 忽略憑證的驗證:

# 讓 Git Client 忽略 SSL 憑證檢查
export GIT_SSL_NO_VERIFY=1

設定了 GIT_SSL_NO_VERIFY 之後,在執行任何 git 指令時,就不會再進行任何 SSL 憑證檢查,也就可以避免出現上面這個憑證不被信任的問題了。

若要讓 git 永久忽略 SSL 憑證檢查,可以直接將設定寫入 git 的設定檔:

# 設定讓 Git Client 永久忽略 SSL 憑證檢查
git config --global http.sslverify false

匯入 git 伺服器憑證

雖然讓 git 忽略 SSL 憑證檢查可以快速解決憑證不被信任的問題,但是這樣就會讓 SSL 連線少了一層防護措施,並不是根本的解決方式,標準的作法應該是匯入 git 伺服器憑證,讓 git 可以信任該憑證,以下是匯入憑證的指令稿:

# Git 伺服器資訊
hostname=your.git.com
port=443

# 取得自己 OS 中放置 CA 的位置
trust_cert_file_location=`curl-config --ca`

# 匯入 Git 伺服器憑證
sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port \
    2>/dev/null  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'  \
    >> $trust_cert_file_location"

這段指令稿在使用之前必須先把 hostname 更換成自己的 git 伺服器,執行之後他就會把該台 git 伺服器的 SSL 憑證匯入自己 OS 的信任憑證清單之中,日後在使用 git 指令時就永遠不會遇到 SSL 憑證不被信任的問題了。

參考資料:StackOverflow暗黑執行緒

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago