SNIの書き換え
サードパーティ製のhttpsクライアントを使っている時にSNIに対応していない為nginxなどでルーティングできない、実際とは違うSNIを試したい時があるかもしれない。
mitmproxyというproxyを使うことでSNIの書き換えができる場合がある。
今回は CONNECTメソッドが使えるクライアントを前提にしている。
ただしおそらく以下のURLのTransparent HTTPSの方式ならプロキシに対応していなくても書き換えられそうである。
https://docs.mitmproxy.org/stable/concepts-howmitmproxyworks
mitmproxyをpipなどでインストールする。
https://docs.mitmproxy.org/stable/overview-installation/
以下のプログラムをcustom_sni.pyとして保存する。
from mitmproxy import ctx, http
import mitmproxy
def next_layer(layer: mitmproxy.proxy.protocol.Layer):
if isinstance(layer,mitmproxy.proxy.protocol.TlsLayer):
layer._custom_server_sni="<解決したいSNI>"
return layer
前準備としてmitmproxyの証明書(~/.mitmproxy/mitmproxy-ca-cert.cer)を許可しておく。
その後以下を実行することで、8080ポートでプロキシを開始する。
mitmproxy -s custom_sni.py
あとは使いたいクライアントでプロキシ設定をすれば良い