HSTSとは

HTTP Strict Transport Security、略してHSTSはRFC6797で定義されている、Webサーバがブラウザに次回以降そのドメイン(サブドメイン)へのアクセスはHTTPSを使うように伝達する仕組みです。

Cloud FlareでHSTSを有効する

Cloud FlareはHSTSに対応しているため、設定をONにするだけですので、このブログをHSTS化させていきます。
Crypto->HSTS設定から、以下のように設定を変更しました。

これだけでHSTSが有効になります。
併せて、Page RulesでのHTTP->HTTPSリダイレクト設定をしていたのを不要と思い削除しました(再度必要になるのですが)

では、ちゃんと設定されたか見ていきます。
HTTPで接続してみると、Httpステータス:301でHTTPSにリダイレクトされていることが分かります。

リダイレクトされたHTTPSの方を見ると、
strict-transport-security:max-age=15552000; includeSubDomains; preload
がレスポンスヘッダーに追加されています。
これで次回以降は最初からhttps接続するようになります。

再度、HTTPで接続してみると、Httpステータス:307でブラウザ内部ではHTTPSにリダイレクトされていることが分かります。

HSTS Pre-loaded Listに登録する

今見たとおり、初回のアクセスはHTTPで接続されリダイレクト先の妥当性も検証できない弱点があるため、 Googleは HSTS Pre-loaded List に登録するサービス を提供しています。
ここにドメインを登録すると、主要なブラウザChrome, Firefox, Opera, Safari, IE11 and Edgeなど)はここを見て初回アクセス時からHTTPS接続をしてくれるようです。
ただ、下記の条件を満たさないと登録できません。自分の場合は2.と3.の条件を満たすため対応が必要でした。

  1. Serve a valid certificate.
  2. Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.
  3. Serve all subdomains over HTTPS.
    • In particular, you must support HTTPS for the www subdomain if a DNS record for that subdomain exists.
  4. Serve an HSTS header on the base domain for HTTPS requests:
    • The max-age must be at least eighteen weeks (10886400 seconds).
    • The includeSubDomains directive must be specified.
    • The preload directive must be specified.
    • If you are serving an additional redirect from your HTTPS site, that redirect must still have the HSTS header (rather > than the page it redirects to).

3.への対応

blog.gyoza.beerというサブドメインのみをHTTPSで運用しており、結果すべてのサブドメインがHTTPSの条件を満たすと思っていましたが違くて、トップレベルのhttps://gyoza.beer が見つからないと怒られてしまいました。
開設から間もないのでURL変わっても良いかと思ってブログのURLを変更して対応しました。
(本当はそこまでする必要ありませんが、設定してみたいので)

2.への対応

HSTSの仕組みでリダイレクトされるので、HTTPS接続を強制するCloud flareのPage Rules設定を消してしまったので再度追加しました。

HSTS Pre-loaded Listに登録する(再)

今度はエラーなしで登録できました。

ただこの段階では申請中になっただけで、数週間待たないとリストに登録されないみたいです。

現時点で、chrome://net-internals/#hstsから見るとdynamic*に設定されていますが、申請が通るとstatic*の方に設定が入るのかな多分。 あと、このリストにも載るみたいです。

(追記) 2週間ぐらい経って見てみたら登録されてました。

Qualys SSL Labsで確認

評価がAからA+に上がりました!

まとめ

Pre-loaded Listへの登録だけ少し面倒ですが、対応は簡単なのでどんどん使っていきたいと思いました。