🔑

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