💭
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