結論
mosquitto コマンドによるMQTTのpublishではなく、curl コマンドでHTTPS POST すればいい。
AWS IoT のデバイスは、Rest API エンドポイントで、MQTTだとポート8883番、 HTTP だと8443番で同じようにメッセージ受信できる。
curl なら、Linux やMac 上で、https_proxy/http_proxy/HTTPS_PROXY/HTTPS_PROXYの環境変数にプロキシサーバの値を設定すれば稼働する。
mosquitto は、これらの環境変数を設定しても動作せず。
方法
以下のように記述する。
ルート証明書ファイル名 < rootCA >
デバイス証明書ファイル名 : < crt >
プライベートキーファイル名 : < private_key >
エンドポイント : < endpoint >
トピック名 : < topic >
デバイス名称 : < device_name >
JSON 形式のメッセージ : < message >
$ mosquitto_pub \
--cafile <rootCA> --cert <crt> --key <private_key> \
-h < endpoint > -p 8883 -q 1 -d \
-t gauge/1 -i <device_name> \
-m '<message>'
$ curl -D - --tlsv1.2 -X POST \
--cacert <rootCA> --cert <crt> --key <private_key> \
"https://<endpoint>:8443/topics/<topic>?qos=1" \
-d <message>