自己署名証明書のあるWindowsでgitを使用して「ローカル発行者証明書を取得できません」を解決できない


283

WindowsでGitを使用しています。msysGitパッケージをインストールしました。テストリポジトリのサーバーに自己署名証明書があります。HTTPを使用して問題なくリポジトリにアクセスして使用できます。HTTPSに移行するとエラーが発生します。

SSL証明書の問題:ローカルの発行者証明書を取得できません。

Windows 7-クライアントマシンの信頼されたルート証明機関に自己署名証明書がインストールされています。エラーメッセージなしで、Internet ExplorerでHTTPSリポジトリURLを参照できます。

Philip Kelleyによるこのブログ投稿は、cURLがクライアントマシンの証明書ストアを使用しないことを説明しています。私はブログ投稿のアドバイスに従って、curl-ca-bundle.crtGitのプライベートコピーを作成し、それを使用するようにGitを構成しました。Gitが私のコピーを使用していると確信しています。コピーの名前を変更すると、Gitはファイルが欠落していると不平を言います。

ブログの投稿で述べたように、証明書に貼り付けましたが、「ローカル発行者証明書を取得できません」というメッセージがまだ表示されます。

HTTPS経由でGitHubリポジトリを複製することで、Gitがまだ機能していることを確認しました。

ブログ投稿と異なるのは、私の証明書ルートであることだけです。それに到達するためのチェーンはありません。私の証明書は、元々、IIS8 IISマネージャーのリンク「Create Self Signed Certificate」をクリックして作成されました。たぶんそれは証明書がcURLが期待するものと何らかの点で異なるものになるでしょう。

自己署名証明書を受け入れるようにGit / cURLを取得するにはどうすればよいですか?



1
また、ローカルネットワークがgithubリポジトリにファイルをプッシュできるかどうかも確認してください。ファイアウォールまたはウイルス対策の制限がある場合があります。
shasi kanth 2018年

Bowerの使用中に誰かがこのエラーに直面した場合は、コンテンツを含む.bowerrcファイルを作成します{ "strict-ssl": false }。私に感謝しないでください、この男に感謝します:stapp.space/fight-with-2私はこのエラーと5時間近くもの間まっすぐに戦いました!!
Ganesh Jadhav

回答:


266

SSL検証を完全に無効にする場合は、Git Bashを開いてコマンドを実行します。

git config --global http.sslVerify false

注:このソリューションでは、中間者攻撃などの攻撃が発生する可能性があります。したがって、できるだけ早く確認を再度オンにします。

git config --global http.sslVerify true

70
この回答は、中間者攻撃を許可することにより、SSLのセキュリティを無効にします。他の回答はすでに、必要な特定の証明書を信頼するようにgitを構成する方法を説明しています。
dsh 2015

12
確かに恐ろしい答えですが、SSLを再びオンにするように指示することすらありません。これがセキュリティの脆弱性が発生する理由です。
Edgar Aroutiounian 2016

Gitblitを使用している場合、sshVerify falseを実行する代わりに他のオプションはありません。
Samir 2016年

24
:無効TLS / SSL検証単一のgitコマンドのために、次のコマンドを使用するにはgit -c http.sslVerify=false clone https://domain.com/path/to/git
マキシムSuslov

1
以下にすでに提供されているいくつかのソリューションがあり、私はすでに短所を提案しました。したがって、問題を解決するためにどのソリューションを選択するかは、あなた次第です。
Samir

153

問題は、デフォルトで「Linux」暗号バックエンドを使用するgitです。

Git for Windows 2.14から、組み込みのWindowsネットワークレイヤーであるSChannelを暗号化バックエンドとして使用するようにGitを構成できるようになりました。これは、Windows証明書ストレージメカニズムを使用し、curl CAストレージメカニズムを明示的に構成する必要がないことを意味します。https//msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v = vs.85).aspx

ただ実行する:

git config --global http.sslbackend schannel

それは役立つはずです。

Windows用のgitをインストールするときのschannelの使用は現在の標準設定です。また、httpsは構成が簡単で、ファイアウォールによってブロックされる可能性が低いため、失敗の可能性が少ないため、リポジトリをSSHでチェックアウトしないことをお勧めします。


1
ただし、このソリューションはgit config --global http.sslCAInfo <my-server-self-signed-cert.pem>機能しない可能性があることに注意してください。http.sslCAInfoサーバーに自己署名証明書を使用するように設定しましたgit clone https://github.com/Microsoft/vscode.git。たとえば、を実行したときに「SSL証明書の問題:ローカル発行者の証明書を取得できません」が発生したのはそのためです(OPとは異なる場合があります)。最後に、stackoverflow.com / a / 47196562/1323552(Ben PP Tung)からの回答を使用して、gitサーバーに固有のsslCAInfo構成を調整して解決しました。
ジョニーウォン

94

私にもこの問題がありました。私の場合、プッシュするたびにサーバー上の作業コピーを更新するために、受信後のGitフックを取得しようとしていました。リンクしているブログの指示に従ってみました。私にとってもうまくいきませんでしたし、ユーザーごとに設定を上書きすることもうまくいきませんでした。

私がしなければならなかったのは、Git全体に対して(この記事で言及されているように)SSL検証を無効にすることでした。完璧な解決策ではありませんが、より良い解決策が見つかるまで機能します。

私は次の場所にあるGit構成テキストファイルを編集しました(Notepad ++などのお気に入りの行末ニュートラルアプリを使用)。

C:\ Program Files(x86)\ Git \ etc \ gitconfig

[http]ブロックに、sslVerifyを無効にするオプションを追加しました。私が終わったとき、それはこのように見えました:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

これでうまくいきました。

注意:

  • これはSSL検証を無効にし、長期的なソリューションとしては推奨されません。

  • リポジトリごとに無効にすることもできますが、それでも十分ではありませんが、設定をローカライズします。

  • LetsEncrypt.orgの登場により、自己署名証明書の代わりにSSLを設定することがかなり簡単になり、自動化され、自由になり、sslVerifyをオフにする必要がなくなりました。


145
これはSSLの目的を無効にします。
syaz 2014

49
コマンド「git config --global http.sslVerify false」を使用して、SSL検証を無効にできます
CleanCoder

6
sslCAinfo構成エントリを指摘していただきありがとうございます。システム全体でgitのSSLを永続的に無効にすることはあまり意味がないため、私は答えを賛成していません(システム全体でSSLを無効にしてから複製し、再度有効にしてから、新しく複製されたリポジトリのローカルgit構成?)。
7heo.tk 2015年

35
一回限りのコマンドの場合は、変更の設定ファイルへの必要はありません:git -c http.sslVerify=false clone https://...
PTS


51

kiddaileyはかなり近いと思いますが、ssl検証を無効にするのではなく、ローカル証明書を提供するだけです。

Git構成ファイル

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

またはコマンドラインから:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

7
git for windowsでは、これはgit config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
Karsten Tinnefeld

または私にとってgit config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
スパロート

MacPortsのユーザーの場合、これはgit config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
miken32

3
Git 2.8 git config --list --show-originでは、http.sslCAinfo構成が設定されている場所を確認するために使用できます
Anish

Macでの証明書の場所は次のとおりです:〜/ macports / share / curl / curl-ca-bundle.crt
user3282611

47

私もこの問題に直面しました。そして最後に、このMSDNブログからガイダンスを得ることで解決しました。

更新

実際には、Git \ binディレクトリにあるgitの証明書ファイルcurl-ca-bundel.certに証明書を追加する必要があります。

手順

  1. ブラウザーでgithubページを開き、アドレスバーのロックアイコンをクリックします。
  2. 開いた小さなポップアップで[証明書の表示]リンクに移動すると、ポップアップウィンドウが開きます。
  3. 証明書タブに移動します(私の場合は3番目)。ルート証明書である最上位ノードを選択します。そして下部にある証明書のコピーボタンを押してファイルを保存します。
  4. ファイルエクスプローラーでGit \ binディレクトリに移動し、curl-ca-bundle.crtをテキストエディターで開きます。
  5. (手順3で)エクスポートした証明書ファイルをテキストエディターでも開きます。
  6. エクスポートした証明書のすべてのコンテンツをcurl-ca-bundle.crtの最後にコピーして保存します。

最後にステータスを確認します。安全のため、編集する前にcurl-ca-bundle.crtファイルをバックアップしてください。


3
「Git \ binディレクトリに移動してcurl-ca-bundle.crtを開きます」git \ binにcurl-ca-bundle.crtがありません!
アントンK

@AntonKが存在しない場合は、メモ帳で自分で作成し、curl-ca-bundle.crtで名前を変更します。他の手順は同じです。
Nadeem Jamali

16
@AntonK単に呼び出されca-bundle.crtmingw64\ssl\certsまたはに配置される場合がありmingw32\ssl\certsます。
Ian Kemp

これをアトラシアンのSourceTreeに使用しました。バンドルされたGITインストールは、%userprofile%\ appdata \ local \ attlassian \ sourcetree \ git_localにあります。curl-ca-bundle.crtはすでに存在し、base64でエンコードされたエクスポートされたルート証明書が追加されました。
Xanothos

40

この質問への答えは、開発SSLにmakecertを使用することで解決ました。

理由はわかりませんが、IISマネージャーの[自己署名証明書の作成]リンクで作成した証明書ではうまくいきません。私は、自己署名CAルートの作成とインストールに関するリンクされた質問のアプローチに従いました。次に、それを使用してサーバーのサーバー認証証明書を発行します。両方をIISにインストールしました。

これにより、元の質問で参照されていたブログ投稿と同じ状況になります。ルート証明書がcurl-ca-bundle.crtにコピー/貼り付けられると、git / curlのコンボが満たされました。


「理由はわかりませんが、IISマネージャーの単純な[自己署名証明書の作成]リンクで作成した証明書ではうまくいかない...」 -私が知る限り、不正な証明書が作成されます。X.509証明書を作成する場合、多くのルールがあります。「それを機能させるために最低限必要なこと」はもはや機能しません。参照してください、あなたの認証局で証明書署名要求に署名するにはどうすればよいのopensslと自己署名証明書を作成する方法は?
jww

これでうまくいきましたが、「IISに両方をインストールしました」という部分に一時的に行き詰まりました。他のユーザーを認証するには...サーバー証明書をIISに割り当て、ルートCAをWindows証明書マネージャーユーティリティ(certmgr.msc)を介して「信頼されたルート証明機関」にインポートする必要があります
Philip

26

ssl検証を完全に無効にしたり、gitが使用するバンドルされたCA証明書ファイルを複製/ハッキングしたりするのを避けるために、ホストの証明書チェーンをファイルにエクスポートして gitでそれを使用することができます

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

それが機能しない場合は、ホストに対してのみ ssl検証を無効にできます。

git config --global http.https://the.host.com/.sslVerify false

注:SSL検証がオフになっている場合、中間者攻撃の可能性があります。


4
この--globalオプションは不要であることに注意してください。を省略した--global場合、設定はその特定のgitリポジトリにのみ適用されます。
ウェスターナー

19

私は同じ問題を抱えていますが、Windowsでsourcetreeを使用していますWindowsの通常のGITでも同じ手順を実行します。次の手順に従って、この問題を解決することができました。

  1. サーバー証明書ツリーの取得これは、chromeを使用して行うことができます。サーバーアドレスに移動します。南京錠のアイコンをクリックして、証明書を表示します。すべての証明書チェーンをbase64エンコードファイル(PEM)形式としてエクスポートします。
  2. 証明書をGIT信頼構成ファイルの信頼チェーンに追加します。「git config --list」を実行します。「http.sslcainfo」構成を見つけます。これは、証明書信頼ファイルの場所を示しています。「--BEGIN--」および「--END--」を含むすべての証明書を信頼チェーンファイルにコピーします。
  3. 証明書チェーン全体を証明書ファイルに追加してください

これにより、自己署名証明書とGITの使用に関する問題が解決されます。

「http.sslcapath」構成を使用してみましたが、これは機能しませんでした。また、証明書ファイルにチェーン全体を含めなかった場合も、これは失敗します。誰かがこれらにポインタを持っている場合は、上記を繰り返して新規インストールする必要があるため、私に知らせてください。

これがシステムGITの場合、[ツール]-> [オプションGIt]タブのオプションを使用してシステムGITを使用できます。これにより、ソースツリーの問題も解決されます。


2
「証明書ファイルにチェーン全体を含めなかった場合、これも失敗します」-私はこの問題に遭遇しました
Amani Kilumanga 2016年

チェーン全体を含む限り、私はgithub証明書の上に2つの証明書を持っています。sslcainfo.crtファイルにroot-> next cert-> github certとして順番に含めますか?
Jecoms 16

ルート証明書を追加するだけでgit repoパッケージにアクセスできました。
Jecoms 16

将来の読者のために。それが重要かどうかはわかりませんが、「ルート」(最上位)の証明書を(http.sslcainfo)ファイルの最後に配置しました。そして、チェーンのルート証明書から離れるとき、その証明書を(http.sslcainfo)ファイルの前のエントリの上に置きました。
granadaCoder

11

以下の場合はgithubのリポジトリ(または任意のなし-自己署名本命)、Gitのをオン窓のインストール中に以下の選択、問題を解決しました。

ここに画像の説明を入力してください


1
あなたは別の質問に答えたようです。OPの質問は、Windowsクライアントの自己署名証明書に関するものでした。
JWW

@jww質問のタイトルは、リポジトリが自己署名SSLでなくても表示されるgitエラーメッセージです。
Jawad Al Shaikh 2017

これでエラーが発生しましたが、GitHub Enterpriseにアクセスするには、いくつかのキーの生成と公開/秘密キーの追加が必要でした。
ΩmegaMan

1
自己署名証明書が、グループポリシーを介して役立つWindows管理者によってWindows証明書ストアに配置されている場合、この回答も適切です。
JamesD

7

私は以前にこの問題を抱えていましたが、次の設定を使用して解決しました。

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

git 2.3.1以降でhttps://your.domainは、次の証明書がそれ専用であることを示すためにhttpの後に置くことができます。


1
これもgit config --global http.sslCAInfo <your-server-self-signed-cert.pem>以前に構成した場合、私が見つけた最も単純で最も正確な解決策です(したがって、「ローカル発行者証明書を取得できません」エラーが発生します)
Johnny Wong

これは私の問題に対する正解でした(単に「SSL検証を無効にする」~~ではありません)。特定のホストに対してのみ証明書の場所を指定できることを知りませんでした。エース!
ロシオ・ガルシア・ルケ

1
  1. このリンクからの証明書のダウンロード: https://github.com/bagder/ca-bundle
  2. それを追加 C:\Program Files\Git\binし、C:\Program Files\Git\mingw64\bin

次に、次のようなことを試してください: git clone https://github.com/heroku/node-js-getting-started.git


1

私を台無しにした1つのことは、パスの形式(私のWindows PCで)でした。私はもともとこれを持っていました:

git config --global http.sslCAInfo C:\certs\cacert.pem

しかし、「ローカル発行者証明書を取得できません」というエラーで失敗しました。

最終的に機能したのはこれでした:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

1

私の場合、ConEmu Terminal for Window 7をca-bundleインストールしたので、インストール中にでが作成されますC:\Program Files\Git\mingw64\ssl\certs

したがって、ターミナルで次のコマンドを実行して機能させる必要があります。

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

したがって、my C:\Program Files\Git\etc\gitconfigには以下が含まれます。

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

また、Gitをインストールするときに、ここで説明したのと同じオプションを選択しました。

お役に立てば幸いです。


1

especificエラーSSL証明書の問題を修正するには:gitでローカル発行者証明書を取得できません

Let's Encrypt証明書でも同じ問題が発生しました。

httpsが必要なWebサイト:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

しかしgit pullは言う:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

それを修正するには、以下も追加する必要があります。

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

-5

composerの更新/インストールを実行する前に、このコマンドを使用してください:

git config --global http.sslverify false
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.