SSL certificate problem: Unable to get local issuer certificate
プラットフォームについて: Cloud、Server、および Data Center - この記事はすべてのプラットフォームに等しく適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
問題
プッシュまたはプル時にコマンドラインで次の内容が表示される。
SSL Certificate problem: unable to get local issuer
原因
この問題の原因として 2 種類の原因が確認されています。
- 自己署名証明書を検証できない。
- デフォルトの Git 暗号化バックエンド (Windows クライアント)
ソリューション
ソリューション #1 - 自己署名証明書
回避策
グローバル オプションを使い、証明書の検証を行わないよう git に指定します。
git config --global http.sslVerify false
Please be advised disabling SSL verification globally might be considered a security risk and should be implemented only temporarily
ソリューション - クライアント側
この記事では認証局を CA と呼びます。
この問題はこれまでさまざまな方法で解決されてきています。以降ではクライアント側で実行する複数の解決策を提案しています。
- git.exe の証明書ストアに root 証明書が追加されていることを確認します。このファイルの場所は GIT のインストール方法/先に応じます。たとえば、Git Bash の信頼済みの証明書ストアのディレクトリは C:\Program Files\Git\mingw64\ssl\certs です。Microsoft のブログもご確認ください。
Git に CA バンドルの場所を指定します。
git config --system http.sslCAPath /absolute/path/to/git/certificates
ここで
/absolute/path/to/git/certificates
は CA 証明書を含むファイルを格納した場所です。あるいは CA バンドルを
/bin
ディレクトリにコピーし、gitconfig
ファイルに次の内容を追加します。sslCAinfo = /bin/curl-ca-bundle.crt
- Git を再インストールします。
root 証明書を含む完全な証明書チェーンが CA バンドル ファイルに存在することを確認します。
ソリューション - サーバー側
この問題は、Bitbucket Server がプロキシではなく SSL 終端コネクタで保護されている構成でも発生することがあります。
- Java の KeyStore に完全な証明書チェーン (中間証明書と root 証明書) が含まれていることを確認します。
- KeyStore Explorer などのツールを利用して KeyStore 内の証明書チェーンの詳細を確認できます。
ソリューション #2 - デフォルトの Git 暗号化バックエンド
Windows を利用している場合、git はデフォルトで "Linux" の暗号化バックエンドを使いますが、これによって Git 処理が完了しないことがあります。Git for Windows 2.14 以降では、Windows に組み込みのネットワーク層である SChannel を暗号化バックエンドとして利用するように Git を構成できるようになりました。これを行うには Git クライアントで次のコマンドを実行します。
git config --global http.sslbackend schannel
これによって Windows の証明書保管メカニズムを使い、curl での CA 保管 (http.sslCAInfo
) メカニズムを明示的に構成する必要がなくなります。