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
http.sslCAPath
またはhttp.sslCAInfo
を試してください。 Adam Spires's answer は良い例をいくつか示しています。これが最も安全な解決策です。
適切な設定変数を使用して-c
をgit
に渡すか、 Flow's answer :を使用してください。
git -c http.sslVerify=false clone https://example.com/path/to/git
リポジトリが完全に管理下にある場合は、次のことを試すことができます。
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.
GIT_SSL_NO_VERIFY
をtrue
に設定できます。
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攻撃の影響を受けやすくなります 。
セキュリティチェックを無効にすることは最初の解決策ではなく最後の手段であるため、私は[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
が検証を行うリスクを排除するためです。
私と私の同僚のために、ここでは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 clone
ing時に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/
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はまだ共有ライブラリとしてメモリ内にあるため、コンピュータを再起動します
私はこの問題に遭遇し続けているので、サーバーから自己署名証明書をダウンロードして〜/ .gitcertsにインストールするスクリプトを書き、これらの証明書を指すようにgit-configを更新しました。グローバル設定に保存されているので、リモートごとに一度だけ実行する必要があります。
https://github.com/iwonbigbro/tools/blob/master/bin/git-remote-install-cert.sh
この答えは この記事の / Michael Kauffmanによって書かれた - からの抜粋です。
企業用SSL証明書でGit for Windowsを使用する
問題 :
企業のSSL証明書を持っていて、コンソールまたはVSCodeからリポジトリを複製しようとすると、次のエラーが発生します。
致命的: ' https:// myserver/tfs/DefaultCollection/_git/Proj/ ':SSL証明書の問題:ローカル発行者証明書を取得できません _
解決策 :
ルート自己署名証明書をファイルにエクスポートします。あなたはあなたのブラウザの中からこれをすることができます。
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
ウイルス対策とファイアウォールの設定を確認してください。
ある日から別の日まで、gitはもう機能しませんでした。上記の説明により、Kasperskyは自己署名入りのアンチウイルス個人用ルート証明書を中間に配置しています。上記の手順に従って、Gitにその証明書を受け入れさせることはできませんでした。私はあきらめた。私にとってうまくいくのは、暗号化された接続をスキャンする機能を無効にすることです。
この後、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
Josh Peak の answer のように、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 17b1e1d の Junio C Hamano - gitster
- にマージされました、2017年8月11日)
http.c
:http.sslcert
とhttp.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.sslkey
、http.sslcert
のような設定変数をプレーンなバニラ文字列として解析しました。なぜなら "~[username]/
"プレフィックスを理解するgit_config_pathname()
が存在しなかったからです。後で、そのうちのいくつか(つまり
http.sslCAPath
とhttp.sslCAInfo
)を関数を使うように変換し、http.cookeyFile
http.pinnedpubkey
のような変数を最初から使うようにしました。そのため、これらの変数はすべて "~[username]/
"プレフィックスを認識します。残りの2つの変数
http.sslcert
とhttp.sslkey
も、これらはどちらも明らかにファイルへのパス名であるため、この規則を知っているようにします。
.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ファイルのローカルパスに依存します!
Windows上で64ビット版のGitを使用して、自己署名CA証明書をこれらのファイルに追加します。
それが単なるサーバー自己署名証明書の場合
私の答えは遅れるかもしれませんが、それは私のために働きました。誰かに役立つかもしれません。
上記の手順を試してみましたが、問題は解決しませんでした。
これを試してみてくださいgit config --global http.sslVerify false
私はWindowsマシンを使用しており、 この記事 が役に立ちました。基本的に、メモ帳でca-bundle.crtを開き、その中にチェーン証明書(すべて)を追加しました。この問題は、通常、システムとgitリポジトリの間に中間の男性がいる企業ネットワークで発生します。 base 64形式のリーフ証明書を除く証明書チェーンのすべての証明書をエクスポートし、すべてをca-bundle.crtに追加してから、この変更されたcrtファイルのgitを構成する必要があります。
私はこのようにします:
git init
git config --global http.sslVerify false
git clone https://myurl/myrepo.git