この記事に従ってJITRを統合しています。
https://aws.amazon.com/blogs/iot/just-in-time-registration-of-device-certificates-on-aws-iot/
これらすべての手順が完了し、コマンドライン「mosquitto_pub」を使用して証明書を認証できるようになりました。
初めて「mosquitto_pub」コマンドを実行すると、ラムダ関数が呼び出されて承認され、ポリシーがアタッチされ、2 回目にメッセージが IOT に正常に発行されます。
これが私が使用しているコマンドです。
mosquitto_pub --cafile ../root.cert --cert hassanAndCACert.crt --key hassan.key -h <###>.iot.us-east-1.amazonaws.com
-p 8883 -q 1 -t topic5 -i 123456789 --tls-version tlsv1.2 -m '{"hello":"3"}' -d
しかし、Android SDK でこれを認証しようとすると、「ハンドシェイク」失敗エラーが発生します。ここに私が得ている例外があります。
MqttException (0) - javax.net.ssl.SSLHandshakeException: ハンドシェイクが org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38) で org.eclipse.paho.client.mqttv3.internal で失敗しました。 ClientComms$ConnectBG.run(ClientComms.java:664) at java.lang.Thread.run(Thread.java:818) 原因: javax.net.ssl.SSLHandshakeException: Handshake failedat com.android.org.conscrypt.OpenSSLSocketImpl. startHandshake(OpenSSLSocketImpl.java:441) at org.eclipse.paho.client.mqttv3.internal.SSLNetworkModule.start(SSLNetworkModule.java:93)at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run( ClientComms.java:650) ... 1 つ以上の原因: javax.net.ssl.SSLProtocolException: SSL ハンドシェークが終了しました: ssl=0xb91e9b40: SSL ライブラリの障害、通常はプロトコル エラーエラー:100c5416:SSL ルーチン:ssl3_read_bytes:com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(ネイティブ メソッド) at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.ジャワ:353)
興味深いことに、デバイス証明書が既にアクティブで、Android を介してメッセージを発行しようとすると、正常に発行されます。唯一の問題は、最初の呼び出しで証明書を認証することです。私のコードに欠陥がある場合、アクティブ化された証明書に対してメッセージを送信するべきではありません。
mosquitto 呼び出しと android コードの違いは、mosquitto が接続してメッセージを発行するための単一のコマンドを作成していることです。AWS SDK の PAHO-MQTT は、発行する前に最初に接続する必要があり、「接続」で例外が発生します。 '。AWS ログにもログがありませんでした。