HSTS をやめる方法

そんな設定をサーバ側でしていないのに、URL スキームに http を指定しているのに、「なぜ常に https でアクセスされてしまうのじゃー」、と悩んだ現象の原因と解決方法です。

■原因

HSTS という、URL スキームに関係なく、https でアクセスさせる仕組みが原因でした。

でも、Web サーバ側では明示的に HSTS の「Strict-Transport-Security」ヘッダを出した覚えはありません。

さらに探っていくうちに、該当 URL のサブディレクトリにインストールした、OwnCloud において、「設定」内の「常にHTTPSを使用する」にチェックを入れていると、「Strict-Transport-Security」ヘッダが出力される仕様でした。

このため、この設定を行った後、https で該当 URL の OwnCloud にアクセスしてしまうと、ブラウザが「この URL は常に https で接続しなくちゃ」と認識して、以後、http:// からアドレスを打ち込んでも、https に遷移してしまうと言うことでした。

■元に戻す方法 (HSTS を無効にする)

該当ホストの HSTS を無効にするには、Web サーバ側で「Strict-Transport-Security: max-age=0」を出力してあげれば OK のようです。

Apache であれば header モジュールを有効にした上で、VirtualHost ディレクティブ内などで

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

の様に設定します。AllowOverride で FileInfo が許可されていれば、.htaccess でも対応できると思います。

その上で、一度該当 URL にブラウザでアクセスして、ブラウザ側に「このホストは HSTS が無効になったんだな」と認識させてあげれば、以後は http から https への自動遷移は発生しません。

■参考

RFC 6797 – HTTP Strict Transport Security (HSTS)」によれば、以下のような記載がありました。

A max-age value of zero (i.e., “max-age=0”) signals the UA to cease regarding the host as a Known HSTS Host, including the includeSubDomains directive (if asserted for that HSTS Host).

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です