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などのサブドメインやサブディレクトリは省略します。
この↑StatusとEligibilityメッセージが出たら、画面下の2つの項目にチェックを入れてSubmitほにゃららを押します。
そして、もう一度登録したいサイトURLをチェックして、こちら↓のStatus表示が出れば登録申請が完了です。
しばらく待っていれば、いつの間にか登録されています。たったこれだけです。
もし途中で赤い画面とエラー表示が出た場合は [ 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からは鍵マークをクリックすると確認できます。無効となっている場合は有効期限が切れていないでしょうか?
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などのサブドメインやサブディレクトリは省略します。
下の"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ヘッダー情報を書きます。
もしこちら↓のエラーが出たら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です。
そして、その下にあるチェック欄2つをチェックしてSubmitを押します。
再度状況を確認すると、StatusがHSTSプリロードを申請中になります。
あとは待っていれば、いつの間にかこのように↓HSTSプリロードが完了しています。
如何でしょうか。慣れれば [ 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プリロード設定・登録する際にはご注意ください。