Help us understand the problem. What is going on with this article?

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

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が頼りになりそうです。

https://github.com/Microsoft/Git-Credential-Manager-for-Windows/issues/646

これに倣って、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

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

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away