課題・背景
会社のプロキシ利用した状況下かつ、会社独自のルート証明書を使用(Windowsの認証局ストアにインポート)している場合。
Gitは通常、認証局ストアを参照しないため、そのままだとSSLのエラーが発生する。
下記のように、sslVerifyをfalseにすることでも対処可能だが、セキュリティ的に心配。
git config --global http.sslVerify false
git config --global https.sslVerify false
対処方法
Windowsの認証局ストアに登録されたルート証明書をエクスポートせずにGitで使用することは、直接的には難しいです。Gitは通常、証明書ファイルを直接参照する設定を必要とするためです。
しかし、以下の方法で間接的に対応することができます:
-
Windowsの証明書ストアを信頼するようにGitを設定:
- Gitの設定ファイル(
gitconfig
)を編集し、Windowsの証明書ストアを信頼するように設定します。具体的には、以下のように設定します:この設定により、GitはWindowsの証明書ストアを使用するようになります。git config --global http.sslBackend schannel
- Gitの設定ファイル(
-
環境変数の設定:
- 環境変数を設定して、GitがWindowsの証明書ストアを使用するようにします。以下のコマンドを実行します:
これにより、GitはWindowsの証明書ストアを使用するようになります。
set GIT_SSL_BACKEND=schannel
- 環境変数を設定して、GitがWindowsの証明書ストアを使用するようにします。以下のコマンドを実行します:
これらの設定を行うことで、Windowsの認証局ストアに登録されたルート証明書をエクスポートせずに使用することが可能になります¹²³。
schannel
とは?
schannel
は、Windowsのセキュリティサポートプロバイダ(SSP)の一つで、SSL/TLSプロトコルを実装しています。これにより、Windowsの証明書ストアを利用してSSL/TLS接続を行うことができます。
コマンドの詳細
-
git config --global
: これはGitのグローバル設定を変更するコマンドです。--global
オプションを使用すると、全ユーザーに対して設定が適用されます。 -
http.sslBackend schannel
: これはGitがHTTPS接続において使用するSSL/TLSバックエンドをschannel
に設定することを意味します。
メリット
-
Windowsの証明書ストアを利用:
schannel
を使用することで、Windowsの証明書ストアに登録されたルート証明書をそのまま利用できます。これにより、証明書のエクスポートや個別設定が不要になります。 - 一貫したセキュリティ: Windowsのセキュリティ機能をフルに活用できるため、セキュリティが強化されます。
使い方
以下のコマンドを実行するだけで設定が完了します:
git config --global http.sslBackend schannel
これで、GitはHTTPS接続時にWindowsの証明書ストアを使用するようになります。
ソース:
(1) 【図解/Windows】ルート証明書のインストール方法と確認方法. https://milestone-of-se.nesuke.com/knowhow/lookup-windows-cert/.
(2) Windows環境にルート証明書をインストールする方法 - DigiCert. https://knowledge.digicert.com/ja/jp/solution/SO23057.
(3) ルートCA(証明機関)の証明書をインポートする - Windows - iPentec. https://www.ipentec.com/document/windows-import-root-ca-certification.
(4) セキュリティ証明書の検証が失敗する - Windows Server. https://learn.microsoft.com/ja-jp/troubleshoot/windows-server/certificates-and-public-key-infrastructure-pki/secured-website-certificate-validation-fails.
(5) NT Auth ストア へ ルート証明書 をインポートする - Qiita. https://qiita.com/carol0226/items/5dde4fe77220f4388945.
(6) undefined. https://knowledge.digicert.com/ja/jp/solution/SOT0006.html.