💭

ngrokでHTTPSアップグレードを封じたい

2024/09/23に公開

私は普段CTFで簡易的なサーバーを建てるのにngrokを使っているのですが、これがHTTP通信との相性がすこぶる悪いです。HSTSの説明にもある通り、ngrok.devngrok.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