web-dev-qa-db-ja.com

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

私はWindows上でgitを使っています。 msysgitパッケージをインストールしました。私のテストリポジトリはサーバーに自己署名証明書を持っています。 httpを使用して問題なくリポジトリにアクセスして使用できます。 httpsに移動すると、「SSL証明書の問題:ローカル発行者証明書を取得できません」というエラーが表示されます。

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

このブログ http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe-s- store.aspx curlはクライアントマシンの証明書ストアを使用しないと説明しました。私はブログ投稿のアドバイスに従って、curl-ca-bundle.crtのプライベートコピーを作成し、それを使用するようにgitを設定しました。私はgitが私のコピーを使っていると確信しています。コピーの名前を変更した場合gitはファイルが見つからないと文句を言います。

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

HttpsでGitHubリポジトリを複製して、gitがまだ機能していることを確認しました。

私がブログ投稿と違うのは、私の証明書ISルートです - それに到達するための連鎖がないことだけです。私の証明書は、もともとIIS 8 IISマネージャのリンク「自己署名証明書の作成」をクリックしたものです。たぶんそれは証明書がcurlが期待するものと何らかの点で異なるものにする。

Git/curlに自己署名証明書を受け付けるにはどうすればいいですか?

205
RichardHowells

この質問に対する回答 開発用SSLにmakecertを使用すること これを修正しました。

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

それは私の状況が元の質問で参照されたブログ投稿と同じになることを意味します。ルート証明書がcurl-ca-bundle.crtにコピー/ペーストされると、git/curlコンボは満たされました。

39
RichardHowells

SSL検証を完全に無効にしたい場合は、Git Bashを開いてコマンドを実行してください。

git config --global http.sslVerify false

注:この解決策は中間者攻撃のような攻撃にあなたを開くかもしれません 。そのため、できるだけ早く検証を再度有効にしてください。

git config --global http.sslVerify true
184
Samir

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

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

次の場所にあるGit configテキストファイル(Notepad ++のような私のお気に入りの行末ニュートラルアプリを含む)を編集しました。

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

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

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

それがトリックでした。

注: これはSSL検証を無効にするため、長期的な解決策としてはお勧めできません。

88
kiddailey

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

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

それが役立つはずです。

Schannelを使用することは、Windows用のgitをインストールする際の標準設定になりました。また、可能であれば、SSHでリポジトリをチェックアウトしないことをお勧めします。

65
Ihor Zenich

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

Git設定ファイル内

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

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

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

私もこの問題に直面しました。そして最後に このMSDNブログ からの指導を受けることで解決しました。

更新

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

ステップ

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

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

36
Nadeem Jamali

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

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

それでもうまくいかない場合は、ホストに対してSSL検証 only を無効にすることができます。

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

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

20
zionyx

私はちょうど同じ問題を抱えていましたが、ウィンドウズ上のソースツリーの使用ウィンドウズ上の通常のGITについても同じステップです。以下の手順に従って、私はこの問題を解決することができました。

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

これで、自己署名証明書とGITを使用して問題を解決するはずです。

"http.sslcapath"設定を使用しようとしましたが、これはうまくいきませんでした。また、証明書ファイルにチェーン全体を含めなかった場合も、これは失敗します。誰かがこれらについてのポインタを持っているならば、上記が新しいインストールのために繰り返されなければならないので私に知らせてください。

これがシステムGITであるならば、あなたはシステムGITを使用するためにツール - >オプションGItタブのオプションを使用することができ、これはそれからsourcetreeの問題も解決します。

17
JamesD

githubリポジトリ(または自己署名なしの証明書) の場合、Git-on-windowsのインストール中に以下を選択すると問題が解決しました。

enter image description here

6
Jawad Al Shaikh

私は以前にこの問題を抱えており、次の設定を使ってそれを解決します。

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

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

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

それでは、次のようにしてください。git clone https://github.com/heroku/node-js-getting-started.git

1
Alex

私がめちゃくちゃになったことの1つは、パスの形式です(私のWindows PC上)。私はもともとこれを持っていました:

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

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

最後にうまくいったのはこれです。

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