157
112

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHubへのgit clone/pull/push時にSSL証明書まわりでエラーが出るときの本当に正しい対処法

Last updated at Posted at 2018-10-14

SSLまわりのエラーでGitHubに繋がらないときのおはなし

たとえば 以下のようなエラーメッセージでGitHubにhttps接続できなくなったときの対処法です。

$ git clone https://github.com/karno/Cadena
Cloning into 'Cadena'...
fatal: unable to access 'https://github.com/karno/Cadena/': SSL certificate problem: self signed certificate in certificate chain
exit status 128

TL;DR

気軽に $ git config --global http.sslVerify false するな💢

今回のおはなしは要するにこれ→ https://github.com/Microsoft/Git-Credential-Manager-for-Windows/issues/646
KasperskyのWeb保護をオンにしているのであれば今すぐオフにしましょうというお話でした。

やったこと:

  • gitを最新版にアップグレードする
  • opensslを使って $ openssl s_client -connect www.github.com:443 して問題の証明書を見る(今回の場合)

以降、どうやってこれにたどり着いたかの備忘録です。

Step 1. gitから事情聴取

gitが叫んでいる通り、、エラーとしてはSSL certificate problem: self signed certificate in certificate chain 以外の何者でもありませんが、もう少しお話を詳しく聞いてみましょう。
しばらくgitをアップデートしていなかったのを思い出して、まずは最新版をインストールし直し。
以降、Windows 10 x64での git 2.19.1, openssl 1.1.1 でお話を進めます。

GIT_CURL_VERBOSE=1 してからcloneすると、gitの通信周りの詳細なログが得られます。

$ set GIT_CURL_VERBOSE=1
$ git clone https://github.com/karno/Cadena
Cloning into 'Cadena'...
* Couldn't find host github.com in the _netrc file; using defaults
*   Trying 192.30.255.112...
* TCP_NODELAY set
* Connected to github.com (192.30.255.112) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
  CApath: none
* SSL certificate problem: self signed certificate in certificate chain
* Closing connection 0
fatal: unable to access 'https://github.com/karno/Cadena/': SSL certificate problem: self signed certificate in certificate chain
exit status 128

だいたいの通信エラーはここで得られる情報が頼りになるかと思いますが、今回はうまいこといきません。

Step 2. OpenSSLから事情聴取

グーグル先生に聞いてみると以下のURLが頼りになりそうです。

これに倣って、opensslで聞いてみます。

$ openssl s_client -connect www.github.com:443
CONNECTED(00000148)
depth=1 O = AO Kaspersky Lab, CN = Kaspersky Anti-Virus Personal Root Certificate
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
 0 s:businessCategory = Private Organization, jurisdictionC = US, jurisdictionST = Delaware, serialNumber = 5157550, C = US, ST = California, L = San Francisco, O = "GitHub, Inc.", CN = github.com
   i:O = AO Kaspersky Lab, CN = Kaspersky Anti-Virus Personal Root Certificate
 1 s:O = AO Kaspersky Lab, CN = Kaspersky Anti-Virus Personal Root Certificate
   i:O = AO Kaspersky Lab, CN = Kaspersky Anti-Virus Personal Root Certificate
...以下略...

OK、わかりました。そういえばこないだ Kaspersky Internet Security を再インストールしたんでした。

Step 3. GitHubを使えなくしてくれてありがとうKaspersky

Kasperskyはデフォルト機能で✞きれいなMITM✞を仕掛けてくるんですけど、💀きれいなMITM💀だけあって解除法は用意されているので設定しておきましょう。

設定→詳細→ネットワーク から、「暗号化された接続のスキャン」を「暗号化された接続をスキャンしない」に設定、でOKなようです。

image.png

image.png

Final Step. 問題は解決したか?

コンソールを再度立ち上げ直し、様子を見てみます。

$ git clone https://github.com/karno/Cadena
Cloning into 'Cadena'...
remote: Enumerating objects: 1727, done.
remote: Total 1727 (delta 0), reused 0 (delta 0), pack-reused 1727 eceiving objects:  97% (1676/1727), 188.01 K
Receiving objects: 100% (1727/1727), 471.64 KiB | 632.00 KiB/s, done.
Resolving deltas: 100% (1314/1314), done.

大丈夫そうです。

いいですか

世の中の記事では $ git config --global http.sslVerify false しろとか

[http]
   sslVerify = false

しろとか書いていますが、こういったものを簡単にオフにしてはいけません。
あなたも技術者の端くれなら、真因を調べるクセを身に着けましょう。

そしてカスペルスキーは反省するように。

157
112
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
157
112

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?