web-dev-qa-db-ja.com

どうすればgitに自己署名証明書を受け付けることができますか?

Gitを使用して、自己署名証明書を受け入れるように指示する方法はありますか?

Httpsサーバーを使ってgitサーバーをホストしていますが、今のところ証明書は自己署名されています。

初めてレポを作成しようとしたとき:

git Push Origin master -f

私はエラーが出ます:

error: Cannot access URL     
https://the server/git.aspx/PocketReferences/, return code 22

fatal: git-http-Push failed
545

特定の証明書を永久に受け入れる

http.sslCAPathまたはhttp.sslCAInfoを試してください。 Adam Spires's answer は良い例をいくつか示しています。これが最も安全な解決策です。

単一のgitコマンドに対してTLS/SSL検証を無効にするには

適切な設定変数を使用して-cgitに渡すか、 Flow's answer :を使用してください。

git -c http.sslVerify=false clone https://example.com/path/to/git

特定のリポジトリに対するSSL検証を無効にするには

リポジトリが完全に管理下にある場合は、次のことを試すことができます。

git config http.sslVerify false

TLS(/ SSL)証明書の検証をグローバルに無効にすることは非常に安全ではありません。しないでください。 --global修飾子を付けて上記のコマンドを発行しないでください。


gitにはかなりの数のSSL設定オプションがあります。 git configのmanページから:

http.sslVerify
    Whether to verify the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_NO_VERIFY environment variable.

http.sslCAInfo
    File containing the certificates to verify the peer with when fetching or pushing
    over HTTPS. Can be overridden by the GIT_SSL_CAINFO environment variable.

http.sslCAPath
    Path containing files with the CA certificates to verify the peer with when
    fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CAPATH environment variable.

その他いくつかの便利なSSL設定オプション

http.sslCert
    File containing the SSL certificate when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_CERT environment variable.

http.sslKey
    File containing the SSL private key when fetching or pushing over HTTPS.
    Can be overridden by the GIT_SSL_KEY environment variable.

http.sslCertPasswordProtected
    Enable git's password Prompt for the SSL certificate. Otherwise OpenSSL will
    Prompt the user, possibly many times, if the certificate or private key is encrypted.
    Can be overridden by the GIT_SSL_CERT_PASSWORD_PROTECTED environment variable.
941
Christopher

GIT_SSL_NO_VERIFYtrueに設定できます。

GIT_SSL_NO_VERIFY=true git clone https://example.com/path/to/git

あるいは、コマンドラインで接続を検証しないようにGitを設定します。

git -c http.sslVerify=false clone https://example.com/path/to/git

SSL/TLS証明書を検証しないと、 あなたはMitM攻撃の影響を受けやすくなります

149
Flow

セキュリティチェックを無効にすることは最初の解決策ではなく最後の手段であるため、私は[EDIT:のオリジナルバージョン]既存の回答の大ファンではありません。何らかの追加の検証方法がなければ、最初の受信時に自己署名証明書を信頼することはできませんが、後続のgit操作に証明書を使用すると、少なくとも発生する攻撃に対しては非常に困難になりますafter証明書をダウンロードしました。つまり、ダウンロードした証明書がis本物であれば、それ以降は問題ありません。対照的に、単に検証を無効にした場合、あらゆる種類の中間者攻撃任意のポイントに対して広く開かれます。

具体例を挙げると、有名な repo.or.cz リポジトリは 自己署名証明書 を提供します。そのファイルをダウンロードし、/etc/ssl/certsのような場所に配置してから実行できます。

# Initial clone
GIT_SSL_CAINFO=/etc/ssl/certs/rorcz_root_cert.pem \
    git clone https://repo.or.cz/org-mode.git

# Ensure all future interactions with Origin remote also work
cd org-mode
git config http.sslCAInfo /etc/ssl/certs/rorcz_root_cert.pem

ここでローカルgit configを使用する(つまり、--globalを使用しない)ことは、この自己署名証明書がこの特定のリポジトリに対してのみ信頼されることを意味することに注意してください。これはニースです。また、GIT_SSL_CAPATHを使用するよりも優れています。これは、潜在的に危険にさらされる可能性のある別の認証局を介してgitが検証を行うリスクを排除するためです。

129
Adam Spiers

自己署名認証局のためのグローバル.gitconfig

私と私の同僚のために、ここではsslVerifyを無効にすることなく自己署名証明書を機能させる方法を説明します。 .gitconfig を編集してgit config --global -eを使用するには、以下を追加してください:

# Specify the scheme and Host as a 'context' that only these settings apply
# Must use Git v1.8.5+ for these contexts to work
[credential "https://your.domain.com"]
  username = user.name

  # Uncomment the credential helper that applies to your platform
  # Windows
  # helper = manager

  # OSX
  # helper = osxkeychain

  # Linux (in-memory credential helper)
  # helper = cache

  # Linux (permanent storage credential helper)
  # https://askubuntu.com/a/776335/491772

# Specify the scheme and Host as a 'context' that only these settings apply 
# Must use Git v1.8.5+ for these contexts to work
[http "https://your.domain.com"]
  ##################################
  # Self Signed Server Certificate #
  ##################################

  # MUST be PEM format
  # Some situations require both the CAPath AND CAInfo 
  sslCAInfo = /path/to/selfCA/self-signed-certificate.crt
  sslCAPath = /path/to/selfCA/
  sslVerify = true

  ###########################################
  # Private Key and Certificate information #
  ###########################################

  # Must be PEM format and include BEGIN CERTIFICATE / END CERTIFICATE, 
  # not just the BEGIN PRIVATE KEY / END PRIVATE KEY for Git to recognise it.
  sslCert = /path/to/privatekey/myprivatecert.pem

  # Even if your PEM file is password protected, set this to false.
  # Setting this to true always asks for a password even if you don't have one.
  # When you do have a password, even with this set to false it will Prompt anyhow. 
  sslCertPasswordProtected = 0

参考文献:

git cloneing時にconfigを指定する

リポジトリごとに適用する必要がある場合は、リポジトリディレクトリでgit config --localを実行するようにドキュメントに指示されています。リポジトリがローカルに複製されていない場合は、役に立ちません。

上記のようにグローバル設定を設定してglobal -> local hokey-pokeyを実行し、クローンが作成されたらそれらの設定をローカルリポジトリ設定にコピーできます。 

あるいはあなたができることは クローン作成後にターゲットリポジトリに適用されるgit clone でconfigコマンドを指定する)です。

# Declare variables to make clone command less verbose     
OUR_CA_PATH=/path/to/selfCA/
OUR_CA_FILE=$OUR_CA_PATH/self-signed-certificate.crt
MY_PEM_FILE=/path/to/privatekey/myprivatecert.pem
SELF_SIGN_CONFIG="-c http.sslCAPath=$OUR_CA_PATH -c http.sslCAInfo=$OUR_CA_FILE -c http.sslVerify=1 -c http.sslCert=$MY_PEM_FILE -c http.sslCertPasswordProtected=0"

# With this environment variable defined it makes subsequent clones easier if you need to pull down multiple repos.
git clone $SELF_SIGN_CONFIG https://mygit.server.com/projects/myproject.git myproject/

ワンライナー

編集: VonC s answer )は、2.14.x/2.15からこの1つのライナーまでの特定のgitバージョンの絶対パスと相対パスに関する警告を示しています。

git clone -c http.sslCAPath="/path/to/selfCA" -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" -c http.sslVerify=1 -c http.sslCert="/path/to/privatekey/myprivatecert.pem" -c http.sslCertPasswordProtected=0 https://mygit.server.com/projects/myproject.git myproject/

CentOS unable to load client key

あなたがCentOSでこれを試していて、あなたの.pemファイルがあなたに与えているのなら 

unable to load client key: "-8178 (SEC_ERROR_BAD_KEY)"

それでは、あなたは this StackOverflow answercurlがOpen SSLの代わりにNSSをどのように使用するかについての答え= /になります。

そして source からcurlを再構築したいと思うでしょう:

git clone http://github.com/curl/curl.git curl/
cd curl/
# Need these for ./buildconf
yum install autoconf automake libtool m4 nroff Perl -y
#Need these for ./configure
yum install openssl-devel openldap-devel libssh2-devel -y

./buildconf
su # Switch to super user to install into /usr/bin/curl
./configure --with-openssl --with-ldap --with-libssh2 --prefix=/usr/
make
make install

libcurlはまだ共有ライブラリとしてメモリ内にあるため、コンピュータを再起動します

パイソン、ピップ、コンダ

関連 WindowsでPythonが使用するCAストアにカスタムCAルート証明書を追加する方法?

23
Josh Peak

私はこの問題に遭遇し続けているので、サーバーから自己署名証明書をダウンロードして〜/ .gitcertsにインストールするスクリプトを書き、これらの証明書を指すようにgit-configを更新しました。グローバル設定に保存されているので、リモートごとに一度だけ実行する必要があります。

https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh

14
Craig

この答えは この記事の / Michael Kauffmanによって書かれた - からの抜粋です。

企業用SSL証明書でGit for Windowsを使用する

問題 : 

企業のSSL証明書を持っていて、コンソールまたはVSCodeからリポジトリを複製しようとすると、次のエラーが発生します。

致命的: ' https:// myserver/tfs/DefaultCollection/_git/Proj/ ':SSL証明書の問題:ローカル発行者証明書を取得できません _

解決策

  1. ルート自己署名証明書をファイルにエクスポートします。あなたはあなたのブラウザの中からこれをすることができます。

  2. Gitフォルダ(現在のバージョンC:¥Program Files¥Git¥usr¥ssl¥certsですが、過去に変更されています)で「ca-bundle.crt」ファイルを見つけます。ファイルを自分のユーザープロファイルにコピーします。 VSCodeのようなテキストエディタでそれを開き、エクスポートした証明書の内容をファイルの末尾に追加してください。

それでは、新しいファイルを使用するようにgitを設定する必要があります。

git config --global http.sslCAInfo C:/Users/<yourname>/ca-bundle.crt

これにより、ユーザープロファイルのルートにある.gitconfigファイルに次のエントリが追加されます。

[http] sslCAInfo = C:/Users/<yourname>/ca-bundle.crt

6
AperioOculus

ウイルス対策とファイアウォールの設定を確認してください。

ある日から別の日まで、gitはもう機能しませんでした。上記の説明により、Kasperskyは自己署名入りのアンチウイルス個人用ルート証明書を中間に配置しています。上記の手順に従って、Gitにその証明書を受け入れさせることはできませんでした。私はあきらめた。私にとってうまくいくのは、暗号化された接続をスキャンする機能を無効にすることです。

  1. オープンカスペルスキー
  2. 設定>追加>ネットワーク>暗号化接続をスキャンしない

この後、gitは再びsslVerifyを有効にして動作します。

注意。 Anti-Virusのその機能を有効にしたいので、これはまだ私にとって満足のいくものではありません。詳細設定では、Kasperskyはその機能では動作しないWebサイトのリストを表示します。 Githubはそれらの1つとしてリストされていません。 Kasperskyフォーラムで確認します。いくつかのトピックがあるようです。 https://forum.kaspersky.com/index.php?/topic/395220-kis-interfering-with-git/&tab=comments#comment-2801211

3
Henk

Josh Peakanswer のように、sslKeyまたはsslCertを使用して1つのライナーを使用している場合は注意してください。

git clone -c http.sslCAPath="/path/to/selfCA" \
  -c http.sslCAInfo="/path/to/selfCA/self-signed-certificate.crt" \
  -c http.sslVerify=1 \
  -c http.sslCert="/path/to/privatekey/myprivatecert.pem" \
  -c http.sslCertPasswordProtected=0 \
https://mygit.server.com/projects/myproject.git myproject

Git 2.14.x/2.15(2015年第3四半期)のみが~username/mykeyのようなパスを正しく解釈できます(それでも/path/to/privatekeyのような絶対パスを解釈することはできます)。

Junio C Hamano(gitster による commit 8d15496 (2017年7月20日)を参照してください。
手助け: Charles Bailey(hashpling
({ commit 17b1e1dJunio C Hamano - gitster - にマージされました、2017年8月11日)

http.chttp.sslcerthttp.sslkeyはどちらもパス名です

現代のhttp_options()コードパスが 29508e1 ["。HTTP。*"のさまざまなhttp。*オプションを解析するために作成されたとき(2005-11-18、 Git 0.99.9k)、それ以降は 7059cd9 ( "http_init():Fix config file parsing"の複数の設定ファイル間のの相互作用について修正されました。2009-03- 09、Git 1.6.3-rc0)、http.sslkeyhttp.sslcertのような設定変数をプレーンなバニラ文字列として解析しました。なぜなら "~[username]/"プレフィックスを理解するgit_config_pathname()が存在しなかったからです。 

後で、そのうちのいくつか(つまりhttp.sslCAPathhttp.sslCAInfo)を関数を使うように変換し、http.cookeyFilehttp.pinnedpubkeyのような変数を最初から使うようにしました。そのため、これらの変数はすべて "~[username]/"プレフィックスを認識します。

残りの2つの変数http.sslcerthttp.sslkeyも、これらはどちらも明らかにファイルへのパス名であるため、この規則を知っているようにします。

2
VonC

.gitconfig ファイルに、自己署名証明書を受け入れ可能にするために、以下の値を追加できます

sslCAInfo = /home/XXXX/abc.crt

Windowsでは、これは私のために働いた:

自己署名証明書の内容をca-bundleファイルの最後に追加します。 ----- BEGIN CERTIFICATE -----および----- END CERTIFICATE -----行を含む

ca-bundleファイルの場所は通常C:\ Program Files\Git\mingw64\ssl\certsです

その後、ca-bundleファイルのパスをグローバルgit configに追加します。次のコマンドはトリックを行います:git config --global http.sslCAInfo "C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt"

注:パスは、ca-bundleファイルのローカルパスに依存します!

1
rw026

Windows上で64ビット版のGitを使用して、自己署名CA証明書をこれらのファイルに追加します。

  • C:¥Program Files¥Git¥mingw64¥ssl¥certs¥ca-bundle.crt 
  • C:¥Program Files¥Git¥mingw64¥ssl¥certs¥ca-bundle.trust.crt

それが単なるサーバー自己署名証明書の場合

  • C:\ Program Files\Git\mingw64\ssl\cert.pem
1
Flaviu

私の答えは遅れるかもしれませんが、それは私のために働きました。誰かに役立つかもしれません。

上記の手順を試してみましたが、問題は解決しませんでした。

これを試してみてくださいgit config --global http.sslVerify false

0
Manjuboyz

私はWindowsマシンを使用しており、 この記事 が役に立ちました。基本的に、メモ帳でca-bundle.crtを開き、その中にチェーン証明書(すべて)を追加しました。この問題は、通常、システムとgitリポジトリの間に中間の男性がいる企業ネットワークで発生します。 base 64形式のリーフ証明書を除く証明書チェーンのすべての証明書をエクスポートし、すべてをca-bundle.crtに追加してから、この変更されたcrtファイルのgitを構成する必要があります。

0
love gupta

私はこのようにします:

git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git
0
JedatKinports