[解決済み] Git が特定の https リモートの自己署名付きサーバー証明書を受け入れるように設定する。
質問
私が参加しているプロジェクトのシステム管理者は、SSHは面倒くさいと判断し、代わりにGitを
https://
のURL(とユーザー名/パスワード認証)を使用します。このURLのサーバーは自己署名証明書を提示しているので、彼は皆に証明書の検証をオフにするようアドバイスしました。これは、セキュリティ上、良い設定とは思えません。
Gitに、リモートX(より良いのは、リポジトリ内の任意のリモートで、偶然に
https://$SERVERNAME/
) は、特定の証明書を受け入れ、そして
だけ
その証明書? 基本的にはSSHのサーバーキーの動作を再現しています。
解決方法は?
簡単に説明します。
- 自己署名入り証明書を取得する
-
それを何らかの(例えば
~/git-certs/cert.pem
) ファイル -
設定
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に書き間違えました)。
関連
-
[解決済み] このリポジトリで別の git プロセスが実行されているようです。
-
[解決済み] Git - node_modules フォルダをどこでも無視するようにしました。
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] リモートレポにプッシュされたGitの特定のコミットを元に戻す
-
[解決済み] ローカルとリモートの Git リポジトリの master ブランチの名前を変更する
-
[解決済み] 自己署名入りの証明書をgitに受け入れさせるにはどうしたらいいですか?
-
[解決済み】自己署名証明書を持つWindowsでgitを使用して「unable to get local issuer certificate」を解決できない。
-
[解決済み】ファイアウォール越しにHTTPSでGitHubにアクセスしようとすると、SSL証明書が拒否される。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ローカルにない作業がリモートに含まれているため、アップデートが拒否された
-
[解決済み】git revert <hash> not allowed due to a merge but no -m option was given.
-
[解決済み] git pull リモートブランチがリモートの参照先を見つけることができない
-
[解決済み】GitHub: クローンには成功したが、チェックアウトに失敗した
-
[解決済み】「オリジン/マスターへのプッシュが拒否されました」というエラーが常に発生するのはなぜですか?
-
gitアップロードの共通エラー処理
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み] git commit signing failed: secret key not available.
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています
-
[解決済み】自己署名証明書を持つWindowsでgitを使用して「unable to get local issuer certificate」を解決できない。