script day.log

大学生がなんとなく始めた、趣味やら生活のことを記録していく。

HSTSに時間を溶かしたお話

先日開発をしていて,http/httpsが混ざった状態で開発を行っていると,
強制的にhttpsにリダイレクトされる現象に遭遇し.
かなりの時間を消費してしまった.

まず,頭の中に浮かんだのはApacheの設定でリダイレクトしてる可能性.
しかし,htaccessを見てもそのような記述は無いし,
confでリダイレクトしてそうな雰囲気もない.
/var/logを見たところ,それらしい記述があるわけでもないため
サーバーサイドでは無いだろうという結論に至りました.

そして次に考えられたのが,クライアント側の問題だということでした.
クライアント側という点は正解だったのですが,検証方法がまずかったので,
上手く検証することができず,時間を浪費しました.

私が行った検証方法としては,ブラウザを変えるということでした.
私のメインブラウザはFirefoxなので,Chromeに変えることで解決するだろうと思いました.
しかし,Chromeに変えても同じ現象が起きてしまったので,混乱を招きました.
やはりサーバーサイドの問題なのかもしれないと思い,
更に深く調査して(何も問題はない),時間を費やしました.
なぜ私がブラウザとしてFirefoxChromeしか考えられなかったかというと,
普段Debianを使っていて,FirefoxChromeしか入っていないからでした.
その時使っていたのはMacだったのでSafariもあり,Safariで検証すると,
原因を突き止める事ができました.プライバシーモードも有効な手段です.
原因はHSTS(HTTP Strict Transport Security)だったわけですね.
解決するのも大変でして,有効期限を0にして,アクセスし直し,
httpでアクセスできる事を確認してから,https化しなければなりませんでした.
問題としてはどこでこの地雷を踏んでしまったのかがわからないということでした.
私の場合は開発中だったということもあり,ある程度察しがついていたので,
地雷元の探索は少し楽でした.
httpアクセスするためにキャッシュを削除したり,サイトデータを削除したり,
履歴を削除したり,Cookieを削除したり,
削除できるものは削除しようって対策が最も楽な?手段ですね.

対策方法は次を参考にしました.
qiita.com

まあ,私自身の検証力の低さにより苦労したわけですが,
Web系開発の難しさを感じました.

HSTSについて悪いように書いてあるように感じるかもしれませんが,
httpsの方が基本的に安全なこともあり,常時httpsがベーシックになるべきだと思いますが,
開発に対して,こういった影響を与えてしまうので少し困りものです.
開発環境も常にSSL通信するように構築すれば,
こういった問題を回避できるのかもしれませんが…
もちろん私の自宅サーバーは常時SSL通信をリクエストするようにしてありますので,
立場的にはHSTS完全否定派ではないです.

この問題には非常に精神を疲弊させられました.