1. ホーム
  2. ギット

[解決済み] Git が特定の https リモートの自己署名付きサーバー証明書を受け入れるように設定する。

2022-04-19 05:13:31

質問

私が参加しているプロジェクトのシステム管理者は、SSHは面倒くさいと判断し、代わりにGitを https:// のURL(とユーザー名/パスワード認証)を使用します。このURLのサーバーは自己署名証明書を提示しているので、彼は皆に証明書の検証をオフにするようアドバイスしました。これは、セキュリティ上、良い設定とは思えません。

Gitに、リモートX(より良いのは、リポジトリ内の任意のリモートで、偶然に https://$SERVERNAME/ ) は、特定の証明書を受け入れ、そして だけ その証明書? 基本的にはSSHのサーバーキーの動作を再現しています。

解決方法は?

簡単に説明します。

  1. 自己署名入り証明書を取得する
  2. それを何らかの(例えば ~/git-certs/cert.pem ) ファイル
  3. 設定 git を使用して、この証明書を信頼するようにします。 http.sslCAInfo パラメータ

詳しくはこちら

リモートサーバーの自己署名付き証明書を取得する

サーバーのURLが repos.sample.com でアクセスしたい場合、ポート 443 .

複数の選択肢がある、入手方法。

opensslを使用した証明書の取得

$ 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-----

Webブラウザで証明書を取得する

私は Redmine を Git リポジトリと一緒に使っていて、ウェブ UI と git コマンドラインから同じ URL にアクセスしています。この方法では、ウェブブラウザにそのドメイン用の例外を追加する必要がありました。

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を設定する

$ git config --global http.sslCAInfo /home/javl/git-certs/cert.pem

また、システム全体でそれを行うには --system の代わりに --global .

そしてテストしてください。これで、サーバと通信できるようになりました。

$ git config --global http.sslVerify false #NO NEED TO USE THIS

すでにgitでssl証明書を無視するように設定している場合は、その設定を解除してください。

$ git config --global --unset http.sslVerify

そして、スペルミスがなく、すべて正しくできたかどうかを確認することもできます。

$ git config --global --list

は、グローバルに設定したすべての変数をリストアップするものです。(httpをhttに書き間違えました)。