Skip to main content

HTTPS で GitHub Pages サイトを保護する

HTTPS は、他者によるあなたのサイトへのトラフィックの詮索や改ざんを防ぐ暗号化のレイヤーを追加します。 透過的に HTTP リクエストを HTTPS にリダイレクトするために、あなたの GitHub Pages サイトに HTTPS を強制できます。

この機能を使用できるユーザーについて

GitHub Pagesは、パブリック・リポジトリのGitHub Freeと組織用のGitHub Free、パブリック・リポジトリとプライベート・リポジトリのGitHub Pro、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Serverで利用できます。 詳しくは、「GitHub のプラン」をご覧ください。

GitHub Pages で、Jekyll ビルドの実行に GitHub Actions が使用されるようになりました。 ビルドのソースとしてブランチを使用する際、組み込みの Jekyll ワークフローを使用する場合は、リポジトリで GitHub Actions を有効にする必要があります。 GitHub Actions が使用できない場合、または無効になっている場合は、ソース ブランチのルートに .nojekyll ファイルを追加すると、Jekyll ビルド プロセスがバイパスされ、コンテンツが直接デプロイされます。 GitHub Actions の有効化の詳細については、「リポジトリの GitHub Actions の設定を管理する」を参照してください。

リポジトリの管理者権限があるユーザは、GitHub Pages サイトに強制的に HTTPS を指定できます。

HTTPS と GitHub Pages について

カスタムドメインが正しく設定されたサイトを含めたすべての GitHub Pages サイトは、HTTPS や HTTPS 強制をサポートします。 カスタム ドメインの詳細については、「カスタムドメインとGitHub Pagesについて」と「カスタムドメインとGitHub Pages のトラブルシューティング」を参照してください。

GitHub Pages サイトは、パスワードやクレジットカード番号といった機密情報のやりとりに使うべきではありません。

Warning

GitHub Pages サイトは、そのサイトのリポジトリがプライベートであっても、インターネット上で一般に利用できます (プランまたは organization で許可されている場合)。 サイトのリポジトリにセンシティブなデータがあるなら、公開前にそのデータを取り除くのが良いでしょう。 詳しくは、「リポジトリについて」を参照してください。

Note

RFC3280 では、共通名の長さは最大 64 文字とされています。 したがって、証明書が正常に作成されるようにするには、GitHub Pagesサイトのドメイン名全体の長さは64文字未満でなければなりません。

あなたの GitHub Pages サイトに HTTPS を強制する

  1. GitHubで、サイトのリポジトリにアクセスしてください。

  2. リポジトリ名の下にある [設定] をクリックします。 [設定] タブが表示されない場合は、 [] ドロップダウン メニューを選び、 [設定] をクリックします。

    タブを示すリポジトリ ヘッダーのスクリーンショット。 [設定] タブが濃いオレンジ色の枠線で強調表示されています。

  3. サイド バーの [コードと自動化] セクションで、 [ ページ] をクリックします。

  4. 「GitHub Pages」で、 [HTTPS の適用] を選択します。

証明書プロビジョニングのトラブルシューティング ("Certificate not yet created" (証明書がまだ作成されていません) エラー)

Pagesの設定でカスタムドメインを設定もしくは変更した場合、自動DNSチェックが開始されます。 このチェックは、DNS設定がGitHubによる自動的な証明書の取得を許可するように設定されているかを判断します。 チェックが正常に終わったら、GitHub によって、[Let's Encrypt] から TLS 証明書をリクエストするジョブがキューイングされます。 有効な証明書を受信すると、GitHubは自動的にそれをPagesのTLSターミネーションを処理するサーバーにアップロードします。 このプロセスが正常に終了すると、カスタムドメイン名の横にチェックマークが表示されます。

このプロセスには多少の時間がかかることがあります。 [保存] をクリックしてから数分経ってもプロセスが完了しない場合は、カスタム ドメイン名の横にある [削除] をクリックしてみてください。 ドメイン名を再入力し、 [保存] をもう一度クリックします。 これでプロビジョニングのプロセスがキャンセルされ、再起動されます。

混在したコンテンツの問題を解決する

GitHub Pages サイトで HTTPS を有効にしているのに、サイトの HTML が HTTP 経由で画像、CSS、または JavaScript を引き続き参照している場合、サイトは "混在したコンテンツ" を提供しています。 混在したコンテンツを提供することで、サイトのセキュリティが下がり、アセットの読み込みに問題が生じる場合があります。

サイトでのコンテンツの混在を解消するには、サイトの HTML で http://https:// に変更して、すべてのアセットが HTTPS 経由で提供されるようにしてください。

アセットは通常、以下の場所にあります。

  • サイトで Jekyll を使っている場合、HTML ファイルはおそらく _layouts フォルダーにあります。
  • CSS は通常、HTML ファイルの <head> セクションにあります。
  • JavaScript は通常、<head> セクションか、</body> を閉じるタグの直前にあります。
  • 画像は通常、<body> セクションにあります。

Tip

サイトのソース ファイルにアセットが見つからない場合は、テキスト エディターか GitHub で、サイトのソース ファイルを http で検索してください。

HTML ファイルで参照されているアセットの例

資産の種類HTTPHTTPS
CSS<link rel="stylesheet" href="http://example.com/css/main.css"><link rel="stylesheet" href="https://example.com/css/main.css">
JavaScript<script type="text/javascript" src="http://example.com/js/main.js"></script><script type="text/javascript" src="https://example.com/js/main.js"></script>
Image<a href="http://www.somesite.com"><img src="http://www.example.com/logo.jpg" alt="Logo"></a><a href="https://www.somesite.com"><img src="https://www.example.com/logo.jpg" alt="Logo"></a>

DNS 構成を確認する

場合によっては、カスタム ドメインの DNS 構成が原因で HTTPS 証明書を生成できなくなります。 これは、余計な DNS レコードや GitHub Pages の IP アドレスをポイントしていないレコードが原因で発生する可能性があります。

HTTPS 証明書を正しく生成するには、次の構成をお勧めします。 @ ホスト付きの追加の AAAAAALIASANAME レコード、または、www サブドメインまたは GitHub Pages で使用するその他のカスタム サブドメインをポイントする CNAME レコードは、HTTPS 証明書の生成を妨げる可能性があります。

シナリオDNS レコードの種類DNS レコード名DNS レコード値
Apex ドメイン
(example.com)
A@185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
Apex ドメイン
(example.com)
AAAA@2606:50c0:8000::153
2606:50c0:8001::153
2606:50c0:8002::153
2606:50c0:8003::153
Apex ドメイン
(example.com)
ALIAS または ANAME@USERNAME.github.io または
ORGANIZATION.github.io
Subdomain
(www.example.com
blog.example.com)
CNAMESUBDOMAIN.example.com.USERNAME.github.io または
ORGANIZATION.github.io