WindowsサーバーでGitblitを実行していますが、ネットワーク上の別のマシンからリポジトリにデータをプッシュしようとしています。 SSL証明書を使用しました(自己署名ではありませんが、会社によって署名されていると思いますか?動作の仕組みは確かではありませんが、Chrome、IEなどは本人確認が行われています)。
Gitblitを実行するサーバーの名前はitscm
です。開発者のデスクトップでは、このURLを使用してTortoiseGit経由でデータをプッシュします。
git.exe Push --progress "https://itscm:8234/git/TestRepo.git" master
しかし、私はこのエラーを受け取ります:
致命的: ' https:// itscm:8234/git/TestRepo.git / 'にアクセスできません:SSL証明書の問題:証明書チェーン内の自己署名証明書
クロムでそのアドレスにアクセスすると、ページに404が表示されますが、URLバーの南京錠が緑色であることがわかります。南京錠をクリックすると、身元が確認されたことがわかります。ブラウザーがこの証明書を有効であると認識する方法がわかりませんが、Gitを介してデータをプッシュしようとすると失敗します。
Git for Windowsには、通常ファイルにある信頼できる証明書の独自の信頼ストアがあります
[Git installdir]\bin\curl-ca-bundle.crt
_(例:C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
; _http.sslCAinfo
_のキー_[Git installdir]\etc\gitconfig
_によって構成されます。[Git installdir]\mingwXX\ssl\certs\ca-bundle.crt
_ここで、XX
は_32
_または_64
_を表します(たとえば、_C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
_;キー_http.sslCAinfo
_で構成されます) _C:\ProgramData\Git\config
_)。証明書のチェックを無効にする(たとえば、_git config http.sslVerify false
_を設定する)ことはお勧めできません。非常に危険です(すべてのセキュリティチェックが無効になっており、 MitM攻撃 が簡単に可能です。すべての新しいhttps接続に適用するように設定してください)。
この信頼ストアに証明書(自己署名証明書または別のルート証明書である場合があります)を追加して、自動的に信頼するには、次の手順を実行する必要があります。
今、あなたはいくつかのオプションがあります
git config --global http.sslCAinfo "[yourfilename]"
_を実行して、ダウンロードしたばかりの証明書のみを含む別の証明書信頼ストアを使用します。git config --global http.sslCAinfo "[yourfilename]"
_を順番に実行しますこの新しいトラストストアを使用します。[path-to-git-trust-store-crt-file]
_に追加して、システム証明書ファイルを更新します(たとえば、管理者権限で実行しているCLIシェルで_type [yourfilename] >> [path-to-git-trust-store-crt-file]
_を使用)ORをメモ帳を使用して(デスクトップ上のca-bundle.crtファイルのコピー、ダウンロードされた.crtファイルの内容を追加してからコピーして戻します)。短所:git updateで変更が上書きされる可能性がありますできた現在、この証明書はGit for Windowsのトラストストアにあります。
TortoiseGitはおそらく同じトラストストアChromeを使用していないでしょう。 Chromeはシステムストアを使用し、Firefoxは独自のものを使用します。TortoiseGitが何を使用しているかはわかりません。
クライアントでgit config http.sslVerify false
を設定すると、さらに運が上がる場合があります。 これをグローバルに設定 にすることもできます。
ここに私のために働いたものがあります。フォルダーC:\GitCerts
を作成します。次に、このBase64 .cer
フォルダーにC:\GitCerts
ファイルをダウンロードします( MrTux で提供される回答に従います)。
git config --global http.sslCAinfo "C:\GitCerts\MyCert.cer"
MyCert.cer
ファイルを開き、開いたままにしますca-bundle.crt
ファイルを開きます。私の場所はC:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
でした。MyCert.cer
ファイル内の証明書テキストがca-bundle.crt
ファイル内にあることを確認します(そうする必要があります)。 bundle.crtファイル(他のすべての証明書情報を必ず残してください)。-----証明書の開始-----
あなたの証明書情報はこちら
-----証明書の終了-----
ca-bundle.crt
ファイルを上書きする必要がある場合があります)ca-bundle.crt
ファイルのパスに基づいて、次のコマンドを実行します:git config --global http.sslcainfo "C:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt"
corporatesの場合、自己署名証明書エラーが発生します-以下が代替手段です。
企業では、httpsプロトコル経由でアクセス可能な同じgitサーバー、通常はsshプロトコル経由でもアクセスできます。サーバーURLのsshオプションを選択し、リポジトリを次のように複製します。
git clone user@server/project.git
もちろん、公開鍵(id_rsa.pub
)あなたの~\.ssh
フォルダーをサーバーに追加する必要があります。この方法では、httpsサーバー証明書をWindows証明書ストアまたはmacキーチェーンに追加する必要はありません( example )。
GitHubを使用してこのエラーが発生しましたが、どこからともなく発生したようです。以前、GitHubで多くの作業を行っていました。
カスペルスキーのアンチウイルスが犯人でした!!
アンチウイルス保護をオフにした(そして数分待った)とき、githubリポジトリからプッシュ/プルすることができました。
私の最後の解決策は、カスペルスキーから証明書を見つけて、それをGit for Windowsのトラストストアに追加することでした。後者の手順については、既に受け入れられている回答で詳しく説明されていますが、同様の立場にある他の人については、次の手順でKaspersky証明書を見つけることができました。
設定>追加>ネットワーク>暗号化された接続のスキャン-詳細設定>証明書のインストール>証明書の表示>詳細>ファイルにコピー> Base-64エンコードX.509(.cer)
この問題に対するもう1つの答えを見つけました。
$ git config http.sslVerify false