HSTS起因で、ブラウザで「自動転送設定が正しくありません」が出てくる場合の症状

マインドテックの冨です。

とあるテック系情報サイト日本語サイトの翻訳チームの知人が「画面にエラーが出て、マシン変えてもブラウザ変えても再現する。DNSとかWiFiが原因かと思って、3G/4G回線のテザリングでも出てくる。なんじゃこれ?」と叫んでおられたので、お節介ながら見てみたら、自分も再現するのですね。

さて、これはなんぞと思って、リクエストを見てみると、httpsで送った結果、確かにひたすらに302が返ってきているわけです。

で、それぞれのヘッダーを見てみると、下図のような感じ

リダイレクトURLの設定はLocationヘッダーで行うわけですが、ここは http:// … とHTTP (ポート80)にリダイレクトしようとしているのがうかがえます。つまりはHTTPS(ポート443)リクエストで来てもHTTPで見るように強制しているわけです。

この一方で"strict-transport-security"ヘッダーも送っている事がわかります。これはRFC6797で標準化されている"HTTP Strict Transport Security(HSTS )"と呼ばれるもので、HTTPで接続した際に強制的にHTTPSへリダイレクトし、SSLストリップ攻撃や中間者攻撃などを防ぐために以降のそのドメインへの接続はすべてHTTPSとする機能です。「Chrome」「Firefox」「Safari」「Internet Explorer」「Microsoft Edge」などの主要ブラウザのほとんどがHSTSをサポートしています。

この結果、LocationヘッダーでHTTPにリダイレクトされても、ブラウザ側は合わせて受け取っているHSTSのヘッダーにより、HTTPSでアクセスを試み、サーバーはHTTPS->HTTPへのリダイレクト応答を行い、これがループしていると推測されます。

Strict-Transport-Security:max-age=(有効期間秒数);includeSubDomains

またincludeSubDomainsが指定されていると、サブドメインにもHSTSが適用されるようになります。ここのサイトの場合には英語版の方は逆にHSTSによってHTTPSにリダイレクトしていました。この際に上記の通りにincludeSubDomainsオプションがついているとサブドメインで運用されていた日本語版の方にも影響していたはずです。(この記事執筆時点では、このオプションは設定されていませんでした。)

この設定がされているWebサーバーに対して、何らかの理由でHTTPSでアクセスしてしまった場合、または親ドメインの方でincludeSubDomain付HSTS設定がされている場合でリンクを踏んだ場合、「自動転送設定が正しくありません」とリダイレクトがループしてしまうため、この場合はapache, nginxなどのWebサーバーの設定ファイルを見直してみてください。

(上記のテック系情報サイトの技術窓口向けに連絡メールを投げてみましたが、返事が来ないですねー。2018/2/8現在、上記のヘッダーが付いてくるので日本語版をHTTPSで閲覧しようとすると現象が再現すると思います。復旧するにはブラウザの直近の履歴、キャッシュ、cookieを削除してください。)

参考:

SSL/TLS暗号設定ガイドライン~安全なウェブサイトのために(暗号設定対策編)~(IPA 情報処理推進機構)

HTTP Strict Transport Security (HSTS)