Strict-Transport-Securityヘッダ(HSTS)のキャッシュを無効化する方法

先ほど、ハマったのでメモ。

ブラウザ側に該当ドメインに対してSSL通信を強制する方法として、HSTSの「Strict-Transport-Security」ヘッダを送信する方法があります。以下のようなものを httpd.confか .htaccessに記載します。

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

max-ageの部分がキャッシュ期間で上記の記述だと365日間キャッシュが保持されます。

意図的にサイト全体をSSL化するのであれば上記の設定で問題ありませんが、検証中に上記の設定を行ってしまうとキャッシュ期間中のアクセスがすべてSSL側にリダイレクトされてしまいます。

怖いのは設定ミスに気がついて上記のヘッダ送信の記述を削除しても、キャッシュは消えないというところです。今回は本サイトだったので影響は少なかったのですが、実務でやると冷や汗モノだと思います。

同時に、includeSubDomains も併記されているとサブドメイン以下にまで影響が広がるのでより一層...怖いですね。

ブラウザ側でキャッシュクリアする方法

Chromeの場合、以下の画面からキャッシュのクリアが行えます。
あくまで各ユーザごとの設定なので一時しのぎ。デバッグ用に。

chrome://net-internals/#hsts

サーバ側で強制的にキャッシュクリアを促す方法

先のヘッダ送信の記述を削除し、代わりに以下のものを記述します。

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

参考サイト

HSTS をやめる方法 - Open the Next