💭
ngrokでHTTPSアップグレードを封じたい
私は普段CTFで簡易的なサーバーを建てるのにngrokを使っているのですが、これがHTTP通信との相性がすこぶる悪いです。HSTSの説明にもある通り、ngrok.devやngrok.appのURLを利用する場合、http://から始まるURLでも勝手にhttps://にリダイレクトしてしまいます。
この回避策として、ngrok.ioを利用することが推奨されていますが、chromeのheadlessモードの場合、どのドメインを利用していたとしてもhttps://にリダイレクトします(何故?)。
回避策として、nginxを使う方法があります。
nginx.conf
events {
worker_connections 1024;
}
http {
server {
listen 19911;
if ($http_x_forwarded_proto = "https") {
return 301 http://$host$request_uri;
}
location / {
proxy_pass http://127.0.0.1:9911;
proxy_set_header Host $host;
}
}
}
(9911の部分は自分が建てるサーバーのポートにしてください)
この状態で、ngrok http --scheme=http,https --domain=<指定ドメイン> 19911とすれば、httpsに来たリクエストがhttpに再度リダイレクトします。無限リダイレクトになりそうなものですが、2回やってあきらめてhttpでリクエストを読み込んでくれます。
Discussion