🔑
mTLS通信をプロキシで覗く
はじめに
mTLS通信をWiresharkなどで覗く場合には、直接Wiresharkに暗号化キーを設定して復号する方法と、通信をプロキシ経由にして、暗号化されてない区間を覗く方法がありそう。ここは後者の話。
プロキシにはいくつかある。今回はstunnel
をつかって、AWS IoT CoreとデバイスとのmTLS通信を覗く。
構成
クライアントがローカルホストにTLSなしで接続する[1]と、stunnelがプロキシしてTLSでAWS IoT Coreに接続[2]。[1]のlocalhostのところをWiresharkでキャプチャする。
mosquitto_pub →[1]→ stunnel(localhost:1883) →[2]→ <code>.ats.iot.ap-northeast-1.amazonaws.com:8883
Stunnel
インストール
brew install stunnel
設定
aws-iot-core.conf
に証明書など必要な情報を設定する。
# Global options
debug = 7
output = /path/to/stunnel.log
syslog = no
[mqtt]
client = yes
accept = 1883
connect = <code>-ats.iot.<region>.amazonaws.com:8883
cert = /path/to/device.pem.crt
key = /path/to/private.pem.key
CAfile = /path/to/AmazonRootCA1.pem
verify = 2
起動
stunnel aws-iot-core.conf
終了は pkill stunnel
とか。
接続テスト
stunnel-pub.sh
TIME=$(date "+%Y-%m-%dT%H:%M:%S%z")
mosquitto_pub \
-h localhost \
-p 1883 \
-t t1 \
-i p3e5fb059 \
-V 5 \
-m {\"time\":\"$TIME\"} \
-d
ログは stunnel.log
で確認。TLSの接続動作なども確認できる。
パケットキャプチャ
WiresharkでloopbackをモニタすればMQTTのヘッダーやペイロードを見ることができる。
Discussion