GitでSSL証明書エラーが出るときの対処法

GitでSSL証明書エラーが出るときの対処法

Gitでリモートリポジトリにアクセスしようとしたときに、以下のようなエラーが表示されて接続できないことがあります。

fatal: unable to access 'https://xxx': server certificate verification failed. CAfile: none CRLfile: none

これは、SSL/TLSによるセキュア通信の際に証明書の検証に失敗したことを示すエラーメッセージです。本記事では、このエラーの原因と、安全性を保ちながら行える対処法について詳しく解説します。


目次

エラーの背景を理解する

このエラーは、GitがHTTPSプロトコルでリモートに接続しようとした際に、SSL証明書の検証に必要なCA証明書ファイル(CAfile)が見つからなかったために発生します。

原因として考えられるもの:

  • Gitのインストール時にCA証明書が正しく設定されていない

  • サーバ側の証明書が自己署名(Self-signed)である

  • 古いGitやcURLが使われていてCA証明書のサポートに問題がある

  • WindowsやMacなどでGitを環境依存のまま使用している


一時的な回避策(非推奨)

まず紹介するのは「一時的な回避策」です。これは安全性を犠牲にする代わりに即座に解決する方法です。

git config --global http.sslVerify false

このコマンドは、Gitに対してSSL証明書の検証をスキップするように指示するものです。しかし、これは中間者攻撃(MITM)のリスクが高まるため、常用は推奨されません


特定ドメインだけにSSL検証無効を適用する方法(限定的な一時回避)

全体に sslVerify = false を適用するのは危険です。しかし、特定のドメインだけに限定することでリスクを最小化できます。

例:git.sample.com だけを無視したい場合

git config --global http."https://git.sample.com".sslVerify false

これにより、https://git.sample.com に対するGit通信だけが証明書検証をスキップします。他のリポジトリ(GitHub, GitLabなど)には影響しません。

設定内容は ~/.gitconfig に以下のように保存されます:

[http "https://git.sample.com"]
sslVerify = false

一時的に自己署名のテストサーバや社内リポジトリへアクセスしたい場合に有効です。


正しい対処法:CA証明書を明示的に指定する

【Windowsの場合】

Git for Windowsを使用しているなら、以下のように証明書ファイルを明示的に指定できます。

git config --system http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"

このパスはGit for Windowsに同梱されている証明書バンドルを指しています。

【Linuxの場合】

CA証明書がインストールされていないか、パスが通っていない可能性があります。

Debian/Ubuntuなら:

sudo apt install ca-certificates
sudo update-ca-certificates

Red Hat/CentOSなら:

sudo yum install ca-certificates
sudo update-ca-trust

その後、Gitに適切なパスを設定します:

git config --global http.sslCAInfo /etc/ssl/certs/ca-certificates.crt

自己署名証明書を使用しているサーバとの通信

社内Gitサーバなどで自己署名証明書を使用している場合、サーバの公開鍵をローカルに登録して信頼済みにすることで安全な通信が可能になります。

手順:

  1. サーバから証明書をダウンロード:

echo | openssl s_client -connect your.git.server:443 -showcerts 2>/dev/null | awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/' > /path/to/mycert.crt
  1. 表示された証明書をコピーし、.crtファイルとして保存(例:mycert.crt

  2. Gitに指定:

git config --global http.sslCAInfo /path/to/mycert.crt

それでも解決しない場合のチェックポイント

  • Gitのバージョンを最新に更新してみる

  • curlのバージョンとSSL対応状況も確認(Gitは内部でcurlを使用しています)

  • 社内ネットワークやプロキシによるSSL干渉も疑ってみる

  • WSL環境や仮想環境など、環境依存の制約がある場合も多い

  • 証明書の有効期限が切れている!

まとめ

GitのSSL証明書エラーは、環境構築の落とし穴のひとつですが、原因を冷静に分析すれば対処可能です。一時的な回避ではなく、証明書の正しい設定や信頼チェーンの構築を意識することで、安全な開発環境を維持できます。

DIY的な視点で言えば、SSL通信の仕組みや証明書の取り扱いは「見えない配線の整備」にも似ています。自動で動いている仕組みに疑問を持ち、ひとつずつ確認していく姿勢が、問題解決の鍵となるでしょう。

サーバ&テクノロジ

Posted by 納戸 工房