SSL判定のA+を取るために安易にHSTSをONにしてはいけません。

シェアする

SSLの判定サイト でA+を取るための設定方法といった記事が散見されますが、その中でも意味がわからずに設定すると事件が起きるHSTSの設定について書きます。

HSTSとは

HSTS(HTTP Strict Transport Security)とは、簡単に説明するとこのサイトはSSL対応だから次からアクセスするときは直接httpsで接続しに来てねーとお知らせするWebサーバーの設定値です。これを設定しておくと、例えばお気に入りに http://example.jp のURLで登録されていたとしても、ブラウザ側でhsts設定が1回目のアクセス時に記憶されて2回目以降のアクセスはhttpを使わずに、勝手にhttpsでアクセスするようになります。

HSTSを設定する前に

SSLの判定サイトでは、大抵HSTSがONになっていないと最高判定を取ることはできなくなっています。もちろん、HSTSを設定しないと毎度httpでつなぎに行ってリダイレクトされてhttpsでのアクセスに切り替わるため、完全にセキュアとは言えません。HSTSをONにし、さらにpreloadをアクティブにすることで初回アクセスからhttpsを使用でき、よりセキュアになります。しかし、このHSTS設定には罠があり、かつ大体紹介されているキャッシュ期間が1年になるため、設置を間違えると1年間キャッシュが残るという悲惨な事件がおきてしまいます。

HSTSの設定方法

SSL判定サイトでA+を取るためにHSTS プリロードをONにしよう!みたいな記事で、いきなり下記の設定をさせることがあります。
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
(Apacheの場合です)

HSTS設定の罠はincludeSubDomainsです。その前にプリロードという仕組みをもう少しご紹介します。HSTSはそのままだと、初回1回だけはhttpでの通信となります。それをhttps化するために、このサイトはSSL対応ですよーリストにサイトを登録することができます。それがHSTSプリロードです。HSTSプリロードを利用するためには、いくつか条件がありますが、その中で、対象ドメインの全てがSSL化されていること、というものがあります。

includeSubDomainsをつけることで、そのドメインのサブドメイン全てにHSTSを適用することになります。実際にサブドメイン全てがSSL化されていれば問題ありませんが、サブドメインの一部がSSL化されていない場合、上記設定を行うことでブラウザはhttpsでしかつなぎにいかなくなるので、サイトが閲覧できなくなります。また、31,536,000は秒なので、1年のキャッシュ期間となります。もしすべてのサブドメインがSSL化されていないサイトで上記設定を適用すると、サブドメイン側が1年間アクセスできなくなることになります。

HSTSの設定は慎重に

ここまでHSTSのヤバさを書いてきましたが、決して設定するなと言っているわけではないです。HSTSはとても重要な設定で、Googleもオフィシャルに推奨しています。プリロードを設定してプリロードリストに登録することで中間者攻撃の可能性があるhttp通信をゼロにできます。ただ、max-age1年の設定を何も考えないで安易に適用することでネガティブキャッシュが発生する可能性があるため、設定は慎重に行わないといけないですよ、という話でした。

スポンサードリンク
 
シェアする