3分で出来るHSTSプリロードの設定方法 - 常時SSL化後に必ず行うべき設定

3分で出来る - HSTSプリロードの設定、常時SSL化後に必ず行うべき設定

3分で出来るHSTS preload設定手順(簡略説明バージョン)

とりあえず、この通り行えばHSTSプリロード設定ができる手順を説明します。詳しい説明は [ HSTSとは ] 以降で行います。また、HSTSプリロード設定は、対象のサイトが既に常時SSL化されていることが前提です。

".htaccessファイル"にHSTS preload情報を記述する

最初に.htaccessのバックアップを取りましょう。これが一番重要です。そしてこのコードを.htaccessに記述します。

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

hstspreload.orgに登録する

次に https://hstspreload.org/ にアクセスして、登録したいサイトURLを入力します。wwwなどのサブドメインやサブディレクトリは省略します。

hsts preload プリロード設定

この↑StatusとEligibilityメッセージが出たら、画面下の2つの項目にチェックを入れてSubmitほにゃららを押します。

hsts preload プリロード設定

そして、もう一度登録したいサイトURLをチェックして、こちら↓のStatus表示が出れば登録申請が完了です。

hsts preload プリロード設定

しばらく待っていれば、いつの間にか登録されています。たったこれだけです。

hsts preload プリロード完了の表示

もし途中で赤い画面とエラー表示が出た場合は [ HSTS設定する前の確認項目 ] と [ HSTSプリロード設定の手順 ] を確認してみて下さい。

HSTSとは

HSTS(HTTP Strict Transport Security)とは、サイト閲覧者がSSL化されたサイトにhttpで接続しようとした際、強制的にhttpsへ接続させるセキュリティ機能のことです。

HSTS対応サイトに一度アクセスするとブラウザが記憶し、次回以降からはhttpからのリダイレクトではなく、httpsページに直接接続するようになります。

301リダイレクト設定だけではダメなのか?

ホームページを常時SSL化した際、このようなコードを.htaccessファイルにコピペして301リダイレクト設定を行ったかと思います。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

例えホームページを常時SSL化したとしても、常時SSL化未対応だった頃の被リンクからの流入は、そのURLをhttpからhttpsに変えてもらわない限りhttpでの接続となります。また、URL直打ちでもhttp接続の恐れがありますね。従って、この設定によってhttp接続を全てhttpsへリダイレクトします。しかし、この設定では毎回一度はhttp接続してしまいます。

一方、HSTSは一度サイトを閲覧すれば2回目以降はhttpsに直接繋がるようになり、セキュリティが高まります。

では1回目はどうかと言うと、残念ながら一旦http接続されてしまいます。そこで、初回訪問時からhttpsに直接アクセスさせるための機能が、次に紹介するHSTS preload(HSTSプリロード)です。

HSTSプリロードとは

HSTSプリロードとは初回アクセス時から直接https接続させる機能です。この機能を使うためには、ブラウザ側に予めhttps接続するWEBサイトのURL情報を伝えておく必要があります。

現在Chrome、Firefox、Opera、Safari、IE 11、Egdeなど主要なブラウザはHSTSプリロードに対応しています。

この設定を完了して初めて常時SSL化が完了したと言えるかと思います。常時SSL化を行った方であれば設定方法はとても簡単で、慣れれば3分で設定できてしまいます。

HSTS設定する前の確認項目

HSTSプリロードを設定する前にまず以下の3項目を確認して下さい。

SSL証明書は有効か?

HSTSプリロードを行うためには、SSL証明書が有効であることが必要です。Chromeからは鍵マークをクリックすると確認できます。無効となっている場合は有効期限が切れていないでしょうか?

ChromeでSSL証明書が有効かを調べる方法

httpからhttpsへの301リダイレクト設定が行われているか?

以下のようなコードを.htaccessファイルに記述し、301リダイレクト設定を行うことも必要です。通常はサイトをSSL化する際に行っていると思います。

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

常時SSL化されているか?

HSTSプリロードはドメインの一部のみに対して設定することができません。例えば <labcoat.jp> だけでなく <www.labcoat.jp> や <blog.labcoat.jp>、<labcoat.jp/blog> などのサブドメイン、サブディレクトリも含めて全てのページを常時SSL化対応する必要があります。

HSTSプリロード設定の詳細な手順

hstspreload.orgで現在の状況をチェックする

まず https://hstspreload.org/ にアクセスして、自分のサイトをチェックしてみましょう。こちらにサイトのURLを入力します。wwwなどのサブドメインやサブディレクトリは省略します。

hsts preload プリロードサイト

下の"Status: 〇〇〇.com is not preloaded." は、"〇〇〇.comはHSTSプリロードが登録されていませんよ"という意味です。

"Eligibility: In order for 〇〇〇.com to be eligible for preloading, the errors below must be resolved:" は、"HSTSプリロードの要件を満たすには以下のエラーを直しましょう"という意味です。

そしてエラー表示はHSTSヘッダーがありませんという内容です。次のステップでHSTSヘッダー情報を書きます。

hsts preload プリロードのエラー

もしこちら↓のエラーが出たら301リダイレクト設定が出来ていません。

hsts preload プリロードの301リダイレクトエラー

".htaccess"にHSTS preload情報を加筆しましょう

まず最初に.htaccessのコピーを取りましょう!油断禁物です。そして以下のコードを.htaccessに記述します。

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

"max-age" は有効期限のことで、31536000(秒)は1年間になります。以前は最低18週(10886400秒)でしたが、現在は最低31536000秒(1年)に変更されましたのでご注意ください。

.htaccessへ記述したら、もう一度 https://hstspreload.org/ でチェックしてみましょう。"Eligibility" が "HSTSプリロード申請の要件を満たしています" という表記に変わりました。このようになればOKです。

hsts preload プリロード設定

そして、その下にあるチェック欄2つをチェックしてSubmitを押します。

hsts preload プリロード設定

再度状況を確認すると、StatusがHSTSプリロードを申請中になります。

hsts preload プリロード設定

あとは待っていれば、いつの間にかこのように↓HSTSプリロードが完了しています。

hsts preload プリロード完了の表示

如何でしょうか。慣れれば [ 3分で出来るHSTS preload設定手順(簡略説明バージョン)] のように3分で登録申請ができます。HSTSプリロード登録を行って、初めて常時SSL化が完了したと言えるかと思います。

HSTSプリロード設定する際の注意点 [2018.07.26追記]

サイトの一部にSSL化されていないページが残っている場合は注意が必要です。というよりHSTSプリロード登録をしてはいけません。

HSTSプリロードはドメイン全体に対して行います。即ち、<labcoat.jp>の場合は<www.labcoat.jp>や<blog.labcoat.jp>などのサブドメインや、<labcoat.jp/faq>などのサブディレクトリも含めて全て強制的にhttps接続します。

従って、SSL化されていないページが残っている状態でHSTSプリロード登録してしまうと、それら非SSL化ページにアクセスできなくなってしまいます。さらに厄介なのが、この登録の有効期限が最低1年間だということです。登録を解除する申請フォームもありますが、数か月かかるようです。

ですので、比較的大きなサイトや自信がない場合は有効期限のmax-ageを1時間や1日など短くして試してみて下さい。max-ageの単位は秒です。

1時間↓

Header set Strict-Transport-Security "max-age=3600; includeSubDomains; preload"

1日↓

Header set Strict-Transport-Security "max-age=86400; includeSubDomains; preload"

HSTSプリロード設定・登録する際にはご注意ください。