ホーム>source

ダウンストリームデバイスで透過ゲートウェイの使用例を試しています。ドキュメントをフォローしています透明なゲートウェイを作成する方法 マイクロソフトによって提供されます。 Ubuntu 18.04仮想マシンにAzure IoT Edgeランタイムをインストールしました。 IoT Edgeランタイムは、1つのカスタムJavaモジュールで完全に実行されています。

Azureポータルで対称キーを使用してIoTデバイスを作成しました。このIoTデバイスの親としてIoT Edgeデバイスを追加しました。 Javaサンプルを使用しています送信イベント メッセージをIoT Edgeデバイスに送信します。

AzureポータルからIoTデバイス接続文字列をコピーし、ドキュメントに従って変更しました接続文字列を取得して変更する。 IoTデバイスの接続文字列は HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz のようになります

上記の接続文字列 myGatewayDevice hostname ですIoT Edgeランタイムをホストするubuntu仮想マシンの例。この例を実行すると、以下の例外が発生しました

<前>ウィズウィズ

このようにIoTデバイスの接続文字列を変更すると

ウィズウィズエラーが発生しました

<前>ウィズウィズ

この問題の修正を手伝ってください。 IoT Edgeデバイスとの通信を実現したい。どんな助けも高く評価されます。

編集1

これは Starting... Beginning setup. Successfully read input parameters. Using communication protocol MQTT. Exception in thread "main" java.lang.IllegalArgumentException: Provided hostname did not include a valid IoT Hub name as its prefix. An IoT Hub hostname has the following format: [iotHubName].[valid URI chars] at com.microsoft.azure.sdk.iot.device.IotHubConnectionString.parseHubName(IotHubConnectionString.java:321) at com.microsoft.azure.sdk.iot.device.IotHubConnectionString.validateTerms(IotHubConnectionString.java:287) at com.microsoft.azure.sdk.iot.device.IotHubConnectionString.<init>(IotHubConnectionString.java:121) at com.microsoft.azure.sdk.iot.device.DeviceClient.<init>(DeviceClient.java:176) at samples.com.microsoft.azure.sdk.iot.SendEvent.main(SendEvent.java:171) の出力です

<前>ウィズウィズ

両方のデバイスが HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice そして Exception encountered while sending MQTT CONNECT packet MqttException (0) - javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38) at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:736) at java.lang.Thread.run(Thread.java:748) 同じUbuntu仮想マシンで実行されています。以下のようにUbuntuデバイスにルートCAをインストールしました

<前>ウィズウィズ

解決:

私に正しい方向を示してくれて、サイレントに感謝します。 sudo openssl s_client -connect RajUbuntuVM:8883 -CAfile Production/EdgeCerts/RootCACertificate/azure-iot-test-only.root.ca.cert.pem -showcerts を追加する必要があります私のJavaコードのパス。対称鍵認証を持つデバイスの場合、ゲートウェイデバイスを検証するためにルートCA証明書を提示する必要があります。この証明書は、Azure IoT Hub for Symmetricデバイスとの直接通信には必要ありません。

0040 - 95 c4 40 5b f9 a8 0d 3c-62 83 50 05 ea 1f b9 0a ..@[...<b.P..... 0050 - 25 e6 99 8a 27 47 4d 55-25 3d 30 aa 00 94 ea 6a %...'GMU%=0....j 0060 - 89 ad 18 60 8f 6b f6 4d-66 6d 05 29 87 6e b0 38 ...`.k.Mfm.).n.8 0070 - a7 01 38 6f 6e 11 c1 db-62 20 43 de 0d 8d ba 29 ..8on...b C....) 0080 - ca 91 78 ff a7 5a 49 1a-d6 ed ae 1d ac 65 73 b8 ..x..ZI......es. 0090 - e1 08 9e 41 63 59 37 ad-88 f9 bd 29 06 8e ca 14 ...AcY7....).... Start Time: 1581571257 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: yes ---
あなたの答え
  • 解決した方法 # 1

    IoT Edgeは(デフォルトで)着信接続に自己署名証明書を使用します。その証明書を信頼するようにダウンストリームデバイスを作成する必要があります。これを行う方法の詳細については、ここを参照してください。

    https://docs.microsoft.com/en-us/azure/iot-edge/how-to-connect-downstream-device

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ containers - マルチクラスターKubernetes:クラスター間通信