Transport Layer Securityについて
SSL に代わる TLS は、GitHub Enterprise Server の初回起動時に有効になり、自己署名証明書で設定されます。 自己署名証明書は Web ブラウザや Git クライアントから信頼されていないため、TLS を無効にするか、Let's Encrypt などの信頼できる機関によって署名された証明書をアップロードするまで、これらのクライアントは証明書の警告を報告します。
SSL が有効な場合、GitHub Enterprise Server アプライアンスは HTTP Strict Transport Security ヘッダーを送信します。 TLSを無効化すると、ブラウザはHTTPへのプロトコルダウングレードを許さないので、ユーザはアプライアンスにアクセスできなくなります。 詳細については、Wikipedia の「HTTP Strict Transport Security (HSTS)」を参照してください。
Warning
ロード バランサーの HTTPS 接続を終了する場合、ロード バランサーから GitHub Enterprise Server への要求も HTTPS を使用する必要があります。 接続の HTTP へのダウングレードはサポートされません。
2 要素認証に FIDO U2F を使用すること、または GitHub Actions を使って GitHub Pages サイトを配置することをユーザーに許可するには、インスタンスで TLS を有効にする必要があります。 詳しくは、「2 要素認証を設定する」をご覧ください。
前提条件
プロダクションでTLSを利用するには、暗号化されていないPEMフォーマットで、信頼済みの証明書認証局によって署名された証明書がなければなりません。 内部認証機関によって署名された証明書を使うには、ルート証明書と任意の中間証明書をインストールする必要があります。 詳しくは、「TLS エラーのトラブルシューティング」をご覧ください。
証明書には、「Subdomain Isolationの有効化」の一覧にあるサブドメイン用に構成されたサブジェクトの別名も必要であり、中間証明機関によって署名されている場合は完全な証明書チェーンを含める必要があります。 詳細については、Wikipedia の「サブジェクトの別名」を参照してください。
ghe-ssl-generate-csr
コマンドを使って、インスタンス用の証明書署名要求 (CSR) を生成できます。 詳しくは、「コマンド ライン ユーティリティ」をご覧ください。
キーは RSA キーでなければならず、パスフレーズは使用できません。 詳しくは、「TLS エラーのトラブルシューティング」をご覧ください。
カスタムのTLS証明書のアップロード
Warning
TLS を構成すると、お使いの GitHub Enterprise Server インスタンス に短いダウンタイムが発生します。
-
GitHub Enterprise Server の管理アカウントから、任意のページの右上隅で をクリックします。
-
[サイト管理者] ページにまだ表示されていない場合は、左上隅の [サイト管理者] をクリックします。
-
[ サイト管理者] サイドバーで [Management Console] をクリックします。
-
[設定] サイドバーで、[プライバシー] をクリックし、[プライバシー モード] をオフにします。
-
[TLS のみ] (推奨) を選択します。
-
[TLS Protocol support] で、許可するプロトコルを選択します。
-
[証明書] の下の [ファイルの選択] をクリックし、インストールする TLS 証明書または証明書チェーン (PEM 形式) を選択します。 このファイルの拡張子は、通常、 .pem、 .crt、または .cer です。
-
[暗号化されていないキー] で [ファイルの選択] をクリックし、インストールする RSA キー (PEM 形式) を選択します。 通常、このファイルの拡張子は .key です。
-
[設定] サイドバーで [設定の保存] をクリックします。
Note
[Management Console] で設定を保存すると、システム サービスが再起動され、ユーザーにわかるダウンタイムが発生する可能性があります。
-
設定の実行が完了するのを待ってください。
Let's Encryptのサポートについて
Let's Encryptは公開の証明書認証者で、ACMEプロトコルを使ってブラウザが信頼するTLS証明書を、無料で自動的に発行してくれます。 アプライアンスのためのLet's Encryptの証明書は、手動のメンテナンスを必要とせず自動的に取得及び更新できます。
Let's Encryptの自動化を利用するには、アプライアンスをHTTP経由で公にアクセスできるようなホスト名で設定していなければなりません。 アプライアンスは、アウトバウンドのHTTPS接続ができるようになっていなければなりません。
Let's Encrypt を使って TLS 証明書管理の自動化を有効にすると、お使いの GitHub Enterprise Server インスタンス は Let's Encrypt のサーバーに接続して証明書を取得します。 証明書を更新するには、Let's EncryptのサーバはインバウンドのHTTPリクエストで設定されたドメイン名の制御を検証しなければなりません。
また、お使いの GitHub Enterprise Server インスタンス で ghe-ssl-acme
コマンド ライン ユーティリティを使って、Let's Encrypt の証明書を自動的に生成することもできます。 詳しくは、「コマンド ライン ユーティリティ」をご覧ください。
Let's Encryptを使ったTLSの設定
Let's Encryptの自動化を利用するには、アプライアンスをHTTP経由で公にアクセスできるようなホスト名で設定していなければなりません。 アプライアンスは、アウトバウンドのHTTPS接続ができるようになっていなければなりません。
Warning
TLS を構成すると、お使いの GitHub Enterprise Server インスタンス に短いダウンタイムが発生します。
-
GitHub Enterprise Server の管理アカウントから、任意のページの右上隅で をクリックします。
-
[サイト管理者] ページにまだ表示されていない場合は、左上隅の [サイト管理者] をクリックします。
-
[ サイト管理者] サイドバーで [Management Console] をクリックします。
-
[設定] サイドバーで、[プライバシー] をクリックし、[プライバシー モード] をオフにします。
-
[TLS のみ] (推奨) を選択します。
-
[Let's Encrypt を使用した TLS 証明書管理の自動化を有効にする] を選びます。
-
[設定] サイドバーで [設定の保存] をクリックします。
Note
[Management Console] で設定を保存すると、システム サービスが再起動され、ユーザーにわかるダウンタイムが発生する可能性があります。
-
設定の実行が完了するのを待ってください。
-
[設定] サイドバーで、[プライバシー] をクリックし、[プライバシー モード] をオフにします。
-
[TLS 証明書の要求] をクリックします。
-
[状態] が "STARTED" から "DONE" に変わるのを待ちます。
-
[Save configuration] をクリックします。
Let's Encrypt を使用した TLS のトラブルシューティング
LET's Encrypt から TLS 証明書に影響する問題のトラブルシューティングを行うことができます。
エラー: "セキュリティ エラーがリソースの読み込みを妨げている"
場合によっては、エンド ユーザーは、お使いの GitHub Enterprise Server インスタンス 上のサービスのページがブラウザーの開発者ツールで次のエラーで応答することを報告することがあります。
Security error prevented the resource from being loaded
これらのエラーを解決するには、証明書を再発行して Let's Encrypt 証明書のサブジェクト代替名 (SAN) を更新する必要があります。 インスタンスの証明書を交換するには、ユーザー側のダウンタイムが必要です。
-
今後のダウンタイムをユーザーに伝え、メインテナント モードを有効にすることを検討します。 詳細については、次の記事を参照してください。
- Enterprise のユーザメッセージをカスタマイズする
- 「メンテナンスモードの有効化とスケジューリング」1. お使いの GitHub Enterprise Server インスタンス に SSH で接続します。 インスタンスが複数のノードで構成されている場合は (高可用性や geo レプリケーションが構成されている場合など)、プライマリ ノードに SSH 接続します。 クラスターを使用する場合は、任意のノードに SSH 接続できます。 HOSTNAME をインスタンスのホスト名、またはノードのホスト名または IP アドレスに置き換えます。 詳しくは、「管理シェル (SSH) にアクセスする」を参照してください。
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME
-
Let's Encryptを無効にするには、以下のコマンドを実行します。
Shell ghe-ssl-acme -d
ghe-ssl-acme -d
-
Let's Encrypt の既存の設定をクリアするには、次のコマンドを実行します。
Shell ghe-ssl-acme -x
ghe-ssl-acme -x
-
Let's Encrypt から新しい証明書を要求してインストールするには、次のコマンドを実行します。
Shell ghe-ssl-acme -e
ghe-ssl-acme -e
-
構成を適用するには、次のコマンドを実行します。
Note
構成の実行中に、お使いの GitHub Enterprise Server インスタンス 上のサービスが再起動する可能性があり、これによりユーザーに短時間のダウンタイムが発生する場合があります。
Shell ghe-config-apply
ghe-config-apply
-
設定の実行が完了するのを待ってください。
-
ユーザー メッセージまたはメインテナント モードを構成した場合は、メッセージを削除し、メインテナント モードを無効にします。