社内の GitLab に対して git clone すると
$ git clone https://... Cloning into 'xxxxxx'... fatal: unable to access 'https://...': schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - ....
こんなエラーが出て clone できなかった。
既に対処したこと
プロキシはちゃんとできてる。インターネットからの clone は上手くいく。
以下 %userprofile%.gitconfig (global の gitconfig) の例。
[http] proxy = http://(プロキシサーバーのIP):(ポート番号) [http "https://...(今回 clone したい gitlab サーバー)"] sslCAInfo=D://(gitlabサーバーの認証に必要なcerファイル).cer
また (gitlabサーバーの認証に必要なcerファイル).cer
も Windows 証明書ストアにインストール済。実際ブラウザから gitlab は開ける。
対処方法
git の SSL 通信設定を openssl にする。
$ git config --system http.sslcainfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt" $ git config --system http.sslbackend openssl
これでエラーがでなくなった。
その他情報
結局なぜこれでエラーが出なくなったのかがわからない。Windows 証明書ストアにインストール済なんだから動くはずなんだが……。
とりあえず関連しそうな情報はまとめておく。
元々はどうなっていたか
sslcainfo は空値で、sslbackend は schannel だった。
$ git config --system http.sslcainfo $ git config --system http.sslbackend schannel
http.sslbackend って何?
SSL 認証としてどんな手段を使うか。
元々は openssl だけだったが、Git for Windows 2.14 からは http.sslbackend=schannel
という新しいモードが使えるようになった。
schannel モードは、Windows にインストールされた証明書ストアを使って SSL 認証をするモード。証明書ストアにちゃんと証明書を入れてたら sslcainfo による crt ファイル指定が不要になる……という恩恵がある。
http.sslcainfo って何?
Git が openssl モードの時に SSL 通信で使う証明書。
基本的に Git に同梱された ca-bundle.crt が指定されてるはずなので、ここをいじることはたぶんない。
ただし Git for Windows 2.14 以降をインストールする時にウィザード画面で「schannel を使う」みたいな選択肢を選んでた場合は、上記したように schannel モードになる& --system http.sslcainfo が空値になる。
参考
- Clone failed: unable to access 'https://github.com/wuhaoyu1990/MagicCamera.git/': schannel: next InitializeSecurityContext failed: Unknown error (0x80092013) - The revocation function was unable to check revocation because the revocation server was offline. · Issue #2414 · desktop/desktop
- git global --system の存在をここで思い出した
- How do I configure Git to trust certificates from the Windows Certificate Store? - Stack Overflow
- schannel モードについてわかりやすい
- SSL 証明書、サーバ証明書、ルート証明書、オレオレ証明書……その辺の話を咀嚼してまとめた - stamemo
- 過去私がまとめた SSL がらみの話(未だに覚えられなくて今回も読み返した)