私が取り組んでいるプロジェクトのシステム管理者は、SSHが「面倒すぎる」と判断しました。代わりに、彼はGitをhttps://
URL(およびユーザー名/パスワード認証)経由でアクセスできるように設定しています。このURLのサーバーは自己署名証明書を提示するため、証明書の検証を無効にするように全員にアドバイスしました。これは、セキュリティの観点から見れば、良いセットアップではありません。
GitにリモートX(または、https://$SERVERNAME/
で始まるリポジトリのリモート)に対して、特定の証明書を受け入れること、およびのみその証明書を伝えることは可能ですか?基本的に、SSHのサーバーキーの動作を二重化します。
簡単に:
~/git-certs/cert.pem
)ファイルに入れますhttp.sslCAInfo
パラメーターを使用して、この証明書を信頼するようにgit
を設定しますより詳しく:
サーバーのURLはrepos.sample.com
であり、ポート443
を介してアクセスするとします。
取得方法には複数のオプションがあります。
$ openssl s_client -connect repos.sample.com:443
出力をファイルcert.pem
にキャッチし、-BEGIN CERTIFICATE-
と-END CERTIFICATE-
の間(および含む)を除くすべてを削除します。
結果のファイル〜/ git-certs/cert.pemの内容は次のようになります。
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
EwYDVQQIEwxMb3dlciBTYXhvbnkxEjAQBgNVBAcTCVdvbGZzYnVyZzEYMBYGA1UE
ChMPU2FhUy1TZWN1cmUuY29tMRowGAYDVQQDFBEqLnNhYXMtc2VjdXJlLmNvbTEj
MCEGCSqGSIb3DQEJARYUaW5mb0BzYWFzLXNlY3VyZS5jb20wHhcNMTIwNzAyMTMw
OTA0WhcNMTMwNzAyMTMwOTA0WjCBkzELMAkGA1UEBhMCREUxFTATBgNVBAgTDExv
d2VyIFNheG9ueTESMBAGA1UEBxMJV29sZnNidXJnMRgwFgYDVQQKEw9TYWFTLVNl
Y3VyZS5jb20xGjAYBgNVBAMUESouc2Fhcy1zZWN1cmUuY29tMSMwIQYJKoZIhvcN
AQkBFhRpbmZvQHNhYXMtc2VjdXJlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEP
ADCCAQoCggEBAMUZ472W3EVFYGSHTgFV0LR2YVE1U//sZimhCKGFBhH3ZfGwqtu7
mzOhlCQef9nqGxgH+U5DG43B6MxDzhoP7R8e1GLbNH3xVqMHqEdcek8jtiJvfj2a
pRSkFTCVJ9i0GYFOQfQYV6RJ4vAunQioiw07OmsxL6C5l3K/r+qJTlStpPK5dv4z
Sy+jmAcQMaIcWv8wgBAxdzo8UVwIL63gLlBz7WfSB2Ti5XBbse/83wyNa5bPJPf1
U+7uLSofz+dehHtgtKfHD8XpPoQBt0Y9ExbLN1ysdR9XfsNfBI5K6Uokq/tVDxNi
SHM4/7uKNo/4b7OP24hvCeXW8oRyRzpyDxMCAwEAATANBgkqhkiG9w0BAQUFAAOC
AQEAp7S/E1ZGCey5Oyn3qwP4q+geQqOhRtaPqdH6ABnqUYHcGYB77GcStQxnqnOZ
MJwIaIZqlz+59taB6U2lG30u3cZ1FITuz+fWXdfELKPWPjDoHkwumkz3zcCVrrtI
ktRzk7AeazHcLEwkUjB5Rm75N9+dOo6Ay89JCcPKb+tNqOszY10y6U3kX3uiSzrJ
ejSq/tRyvMFT1FlJ8tKoZBWbkThevMhx7jk5qsoCpLPmPoYCEoLEtpMYiQnDZgUc
TNoL1GjoDrjgmSen4QN5QZEGTOe/dsv1sGxWC+Tv/VwUl2GqVtKPZdKtGFqI8TLn
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
RedmineをGitリポジトリで使用し、Web UIとgitコマンドラインアクセスに同じURLにアクセスします。この方法では、そのドメインの例外をWebブラウザーに追加する必要がありました。
Firefoxを使用して、Options -> Advanced -> Certificates -> View Certificates -> Servers
に行き、そこで自己署名ホストを見つけ、それを選択し、Export
ボタンを使用して、openssl
を使用して作成したものとまったく同じファイルを取得しました。
注:私は少し驚いた、目に見える言及された権限の名前がない。これは結構です。
前の手順では、証明書を何らかのファイルに含める必要があります。ドメインにアクセスするときにgitから見える限り、どのファイルでも構いません。 ~/git-certs/cert.pem
を使用しました
注:より信頼できる自己署名証明書が必要な場合は、同じファイルに入れてください:
-----BEGIN CERTIFICATE-----
MIIDnzCCAocCBE/xnXAwDQYJKoZIhvcNAQEFBQAwgZMxCzAJBgNVBAYTAkRFMRUw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
AnOtHeRtRuStEdCeRtIfIcAtEgOeShErExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxw
...........
/27/jIdVQIKvHok2P/u9tvTUQA==
-----END CERTIFICATE-----
これは機能します(ただし、単一の証明書でのみテストしました)。
$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem
また、--system
の代わりに--global
を使用して、そのシステム全体を実行することもできます。
それをテストしてください:これで、以下に頼ることなくサーバーと通信できるようになります:
$ git config --global http.sslVerify false #NO NEED TO USE THIS
すでにSSL証明書を無視するようにgitを設定している場合は、設定を解除します。
$ git config --global --unset http.sslVerify
また、スペルミスをせずにすべて正しく行ったことを確認することもできます。
$ git config --global --list
すべての変数をリストするものは、グローバルに設定しました。 (httpをhttにスペルミスしました)。
aeminium.orgのこのページ によると、http.sslCAInfo
またはhttp.sslCAPath
構成アイテムを.git/configに追加する必要があります。これには、Webサーバーの証明書が含まれます。
OSXユーザー調整。
受け入れられた答えの手順に従うと、OSXでの構成時に少し追加されました。
Cert.pemファイルをOSXにログインしているユーザーの下のディレクトリに配置したため、信頼できる証明書の場所を調整しました。
この証明書を信頼するようにgitを構成します。
$ git config --global http.sslCAInfo $ HOME/git-certs/cert.pem