【Git】git cloneしたら「SSL certificate problem」と怒られた時の対処法
事象
flow-typedをgit clone
すると、下記のエラーログがでて失敗する。
fatal: unable to access 'https://github.com/flow-typed/flow-typed.git/':
SSL certificate problem: self signed certificate in certificate chain
SSL certificate problem
↓のようにHTTPS通信でやり取りするから、SSL証明書らへんで怒られている。
ローカルPC <---HTTPS通信(git clone)---> GitHubサーバ
GitHubサーバ側が提供するSSLサーバ証明書に問題があるようだ。何が問題?
self signed certificate in certificate chain
self signed certificate = 自己署名証明書
自己署名であることが問題なのか...何がいけないんだろう。
自己署名証明書とは
A self-signed certificate is an SSL certificate not signed by a publicly trusted certificate authority (CA) but by one's own private key(公的に信頼されている第三者[CA/認証局]によって署名されたものではなく、個人が保有する秘密鍵で署名されたもの). The certificate is not validated by a third party and is generally used in low-risk internal networks or in the software development phase.(内部ネットワークや開発段階で利用されるもの)
つまり
👉HTTPS通信で有効なSSLサーバ証明書は公的に信頼されている第三者(認証局)が保持する秘密鍵 によって署名されたもの。
👉個人で作成した秘密鍵によって署名された証明書は、HTTPS通信する上では有効なものではない。
デフォルトでgitコマンドは自己署名証明書を受け付けない。
gitコマンドの公式ドキュメントにある通り、HTTPS通信時にSSLサーバ証明書を検証するかどうかはhttp.sslVerify
で制御しており、このデフォルト値がtrue
である。
よって、デフォルト設定のままgit clone
すると「自己署名のやつとはHTTPS通信できねえぞこら!!!」と怒られて終了となる。
対処方法【SSLサーバ証明書の検証をOFFにする】
git config --global http.sslVerify false
こうすれば、「自己署名証明書だけど、検証せんから通信しよっか」となり、git cloneが正常に動く。
検証OFFにしていいの?
そもそも「なぜSSLサーバ証明書を検証するのか」を考える。
なぜSSLサーバ証明書が欲しいのか?
→ HTTPS通信で必要だから。
なぜHTTPS通信したいのか?
→ ブラウザ - サーバ間 の通信を暗号化するため。
今回git clone
する通信は暗号化する必要があるのか?
→ 公に公開されているflow-typedのリポジトリをcloneしてくるだけなので、
暗号化する必要はないよな。
というわけで、上記コマンドでSSL証明書の検証をOFFにしてgit clone
しよう。
Discussion