WEBサービスで80番ポートアクセスをができるのがセキュリティ上よくないので443にアクセスするようにしたら少しハマったのでメモ
先日に担当しているサービスを見ていたら、社内の共有ツールに記載していたリンクURL(ログインページ)がHTTPになっていて、HTTPSに書き換えてみたら何故かログインページでリダイレクト→HTTPでログインページ表示というおかしな挙動をしていたのであれ?っと思い、そのままログインしてみたらHTTPのままページが表示されていた。
やばい!!
と思い調べてみたらどうやら社内共有ツール記載のサービスログインページURLが間違っておりリダイレクトしてHTTP→そのままHTTPでページ遷移してもアクセスし続けるという危ない状態。。
利用側へ配っているURLはHTTPSでURLも間違っていないのでひとまずホッとしたが、社内の人間がアクセスしていたものはログインから情報ダダ漏れというお粗末な始末…
昔はログインページはHTTPでログイン実行時のアクセスはHTTPSにするなんてこともしていましたが、基本的に今はログインサービスすべてのアクセスはHTTPSにしたほうがいいと思います。
そんなこんなで、コードの記載なおそうかと思ったんですが1箇所直せばいいのかと思いきやどこを直していいかわからない。。フレームワークでちょいちょいと思っていたんですがね。。
ということで以前にapacheの設定ですべてのHTTPアクセスをHTTPSにリダイレクトしていたので同じ対応をしようと思いました。
書き方忘れちゃったので調べてみると
<ifModule mod_rewrite.c>
RewriteEngine On
LogLevel alert rewrite:trace3
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</ifModule>
こんな感じの記載は見かけるんですが、これを対象サービスのvirtualhost.confに記載してgracefulしてみると。。。
なんですと!!!
リダイレクトループでエラーになっていますね。。
ちなみにステージングで試しているのでまあ大丈夫です。
おかしいな〜、前もこんな記載していたと思ったから先入観でなんでだ??ってなっていたのですが冷静に考えるとわかりました。
サービスはELB(Elastic Load Balancing)を使っていて、80番と443番ポートを受け付けてそれをEC2に80番で流しています。
てことは、ELBに80番で来てEC2に80番で流れてくると443でまた来いよとリダイレクトします。しかしその後にELBで443番で受け付けてもEC2に80番で流してしまいます。
そうするとまた443でまた来いよ!って
永遠のリダイレクトですね
ということでELBでの443リダイレクトで調べるとAWSサポートページにたどり着いて記載されていました。
Classic Load Balancer で HTTP トラフィックを HTTPS にリダイレクトする際、ERR_TOO_MANY_REDIRECTS エラーが発生するのはなぜですか。
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
</VirtualHost>
こちらに変更して解決です!!
前はこの記載じゃなくてできてた気がするけど、ELBじゃなかったのかな??
そういえば前はELBも443しか受け付けてなかった気がしてきた。。。
何はともあれ良かったよかった!!
コメント
コメントを投稿