Https化したサイトなら必ず導入しておきたい HSTSとpreload listの設定手順

SSLを導入して HTTPS 化したWordPressサイトに、HSTS と HSTS preload list を導入したときの手順を解説します。

https サイトに HSTS(Strict Transport Security*1 )を設定することで、サイトへのアクセスを https ページのみに限定するようにブラウザに指示することが可能になります。

さらに、Google が運営する HSTS preload list を導入すると各ブラウザに https ページとしてデフォルトでリスト登録されます。

HSTS と HSTS preload list をセットで導入することで、https サイトの大幅なセキュリティ向上が期待できます。

HSTSの導入に必要な前提条件

Google の「正規 URL を使用する」を参考に、HSTS 導入の前にクリアしておくべき前提を確認します。

  1. root 直下のサイトすべての HTTPS 化
  2. すべてのHTTP://から HTTPS:// へのリダイレクト
  3. すべてのページで HTTPS:// が緑色になっている
  4. rel="canical"の指すURLがすべて HTTPS ページに向いている
  5. 可能な限り、Noindex メタタグの使用は避ける* 

* 自分で書いてて何ですが、”可能な限り”が、どの程度の意味を指しているのか正直ピンときません。ぼくの検索力では具体的に触れているページは見つけられませんでした。

WordPressを利用していれば大抵 noindex メタタグは利用していると思います。指示に従わなかった場合の、”可能な限り”の結果受けることになるペナルティが気になるところです。

以下のGoogleのメッセージから解釈すると、HTTP ページと HTTPS ページの重複インデックスを避けるための noindex みたいです。

Google では、正規 URL として HTTP ページよりも HTTPS ページを優先的に使用します。ただし、以下のようにシグナルが競合する場合は例外です。

~(中略)

HTTPS ページに安全でない依存関係が含まれている。 HTTPS ページが robot.txt でブロックされている(HTTP ページはブロックされていない)

正規 URL を使用する – Search Console ヘルプ

今回、ぼくの場合は新規サイトで HTTP ページのインデックスもほとんどないので、サイト内の重複ページなどはそのまま Noindex メタタグを利用してみます。

HTTP ページと HTTPS ページが共存している場合は、Noindex をいったんすべて外すのが安定だと思われます。「安全でない依存関係には、同一ドメイン内での画像リンクなども含む by search consol」

参考:HTTPS / TLS を使用する際のよくある誤り

 目次に戻る

サーバーのレスポンスヘッダにHSTSの出力を記述する

HSTS をレスポンスヘッダに出力させる .htaccess の記述には主に2種類の方法があるので以下それぞれ説明します。

HSTS のみを利用する場合

.htaccessファイルに一文を加えることで、2度目以降のサイトへのアクセスを指定の期間 https に置き換える記述です

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

主要ブラウザ* は、サイトへの2度目の訪問以降www.http://~へのアクセスをmax-age=31536000(秒/一年間)、すべてHTTPS://~に置き換えます。(ブラウザキャッシュの削除でリセットされます)

* スマホを含めたChrome・Firefox・SafariはHSTSに対応しています。参考:その他ブラウザの対応状況

HSTS preload list に登録する場合

HSTS の記述をした .htaccessファイルに追加の一文を加えることで、サイトへのアクセスは、初回訪問からすべて強制的にHTTPS://~に置き換えます。

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

HSTS preload list に登録されたサイトのドメインはブラウザにデフォルトで保存されます。

Google,Twitter,Facebook など有名所も以下のようにリスト化されています
http/transport_security_state_static.json – chromium/src/net – Git at Google
HSTS preload list に登録されると自分の サイト名 もこのリストに追加されます。
HSTS Preload list の対象からサブドメインを除外する場合
.htaccess からincludeSubDomains;(サブドメインを含む)部分を削除します。
.htaccess に記述する HSTS 構文の場所
<IfModule mod_rewrite.c>もしくはRewriteEngine Onの直前に記述します。
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# BEGIN Redirect to https
<IfModule mod_rewrite.c>
RewriteEngine On

Preload HSTSには利点も多いですが、一度登録されたサイトの解除には時間がかかるようなので利用状況などをよく考えてから設定しましょう。

HSTSのドメインリストから削除したい – Google プロダクト フォーラム

参考サイト:

HTTP ヘッダのレスポンスを確認

Chrome のデベロッパーツールで 設定した HSTS が正しく反映されているか確認します。

img_25112016-0919_0001

記述通りに正しく返されている。

HTTP ヘッダを確認する方法
以下どちらの方法でも簡単に HTTP ヘッダを確認できます。
Chrome デベロッパーツールでHTTP ヘッダを確認する
HTTP ヘッダを調べたいページで起動(F12キーなど)→ Network → Headers → Name(調べる要素) → 項目を確認。の手順で実行します。
Search Console で確認する
fetch as google で 調べたいページの URL を入力すると確認画面で見ることができます。

 目次に戻る

Google Preload HSTS の登録手順

HSTS Preload List Submission から登録します。

Preload HSTS サービスが可能か否かのチェック
以下の画面では、チェックのみで登録されないので大丈夫です。サイトのドメインを入力して Check status~ をクリックします。
img_25112016-1816_0001
Preload List 提出の同意確認
内容を確認してそれぞれの項目にチェックして同意します。
img_25112016-3508_0001
Iam the site owner of サイト名 ~略
サイトオーナーで HSTS preload する許可があればチェックします。
I understand that preloading サイト名 ~略
サーバーで利用していている サブドメイン の HTTPS 化が不完全な場合、ここにチェックすると サブドメイン にアクセスできなくなります。*
Submit サイト名 to the HSTS preload list
同意できたら、Submit をクリックし HSTS preload list を提出します。
* サブドメイン で Preload List を利用する場合は、HSTS Preload list の対象からサブドメインを除外する場合 の項目を確認してください。
Success(登録申請の成功)
img_25112016-5134_0001
現時点ではリストの提出に成功しただけで、リストに載る予定に加わっただけみたいです。設定に不備がなければ数週間後に掲載されるそうです。
さらにリストに載ってからブラウザに反映するまでに、半年!かかる例もあるみたいなのでまったりと待つことにします。

https://woresite.jp/2016/02/18/094416.html

 目次に戻る

終わりに

当初予定になかったブログの HSTS 設定と Preload List の登録が完了しました。色々なサイトの情報をもらいながらですが、なんとか詰まるところもなくそれなりの形に収まったと思います。

実際にやってみたサイトの HSTS 対応ですが、現状 Preload list に登録されていないのと今回試したのは新規サイトなので断言できませんが、Search Consol やWordPressでも URL 関係のエラーはほとんどありません。「知らせがないのが良い知らせ」ってやつなのかもしれません。

超大手サイトの対応を見る限り、今後新しくサイトを立ち上げるときの HTTPS・HSTS(Preload list) 環境は セキュリティ・SEO を重視する場合に必須項目になるのは間違いなさそうです。

Notes:

  • HTTP Strict Transport Security(しばしば HSTS と略されます)は、HTTP の代わりに HTTPS を用いて通信を行うよう、Web サイトからブラウザにに伝達するためのセキュリティ機能です。参考:HTTP Strict Transport Security – Web セキュリティ | MDN https://developer.mozilla.org/ja/docs/Web/Security/HTTP_Strict_Transport_Security to..

シェアする

  • このエントリーをはてなブックマークに追加