🙌

【Git】git cloneしたら「SSL certificate problem」と怒られた時の対処法

2022/08/09に公開

事象

flow-typedgit 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