Skip to main content

HTTPS を使用して GitHub Pages サイトをセキュリティで保護する

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

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

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

リポジトリの管理者アクセス許可を持つユーザーは、 GitHub Pages サイトに対して HTTPS を適用できます。

HTTPS について GitHub Pages

カスタム ドメインで正しく構成されているサイトを含むすべての GitHub Pages サイトでは、HTTPS と HTTPS の適用がサポートされます。 カスタム ドメインの詳細については、「カスタム ドメインと GitHub ページについて」と「カスタム ドメインと GitHub ページのトラブルシューティング」を参照してください。

GitHub Pages 2016 年 6 月 15 日以降に作成され、 github.io ドメインを使用するサイトは HTTPS 経由で自動的に提供されます。

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

警告

企業が Enterprise Managed Usersを使用しない限り、サイトのリポジトリがプライベートまたは内部の場合でも、 GitHub Pages サイトは既定でインターネット上で一般公開されます。 サイトのアクセス制御を管理することで、サイトをプライベートで公開できます。 それ以外の場合、サイトのリポジトリにセンシティブなデータがあるなら、公開前にそのデータを取り除くのが良いでしょう。 詳細については、「リポジトリについて」および「GitHub ページ サイトの表示設定を変更する」を参照してください。

メモ

RFC3280 では、共通名の長さは最大 64 文字とされています。 そのため、証明書を正常に作成するには、 GitHub Pages サイトのドメイン名全体が 64 文字未満である必要があります。

GitHub Pages サイトの HTTPS の適用

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

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

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

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

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

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

Pagesの設定でカスタムドメインを設定もしくは変更した場合、自動DNSチェックが開始されます。 このチェックでは、DNS 設定が が証明書を自動的に取得できるように構成されているかどうかを確認します。 チェックが成功した場合、 GitHub は Let's Encrypt に TLS 証明書を要求するジョブをキューに入れます。 有効な証明書を受信すると、 GitHub はページの TLS 終了を処理するサーバーに自動的にアップロードされます。 このプロセスが正常に終了すると、カスタムドメイン名の横にチェックマークが表示されます。

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

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

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

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

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

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

ヒント

サイトのソース ファイルにアセットが見つからない場合は、サイトのソース ファイルでテキスト エディターまたは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 証明書が正しく生成されるようにするには、次の構成をお勧めします。 ホストが ANAME の追加の @AAAAAALIAS レコード、または GitHub Pages で使用したいお客様の CNAME サブドメインやその他のカスタム サブドメインを指す www レコードがあると、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
サブドメイン
(www.example.com
blog.example.com)CNAMESUBDOMAIN.example.com.
USERNAME.github.io または
ORGANIZATION.github.io