Java 具有到物联网边缘设备的对称密钥连接的物联网设备

Java 具有到物联网边缘设备的对称密钥连接的物联网设备,java,azure,azure-iot-edge,Java,Azure,Azure Iot Edge,我正在尝试下游设备的透明网关用例。我遵循微软提供的文档。我已经在Ubuntu 18.04虚拟机上安装了azure IoT Edge运行时。IoT edge运行时通过一个自定义java模块完美运行 我已在Azure portal上使用对称密钥创建了一个物联网设备。我已将我的物联网边缘设备作为父设备添加到此物联网设备。我正在使用java示例向IoT边缘设备发送消息 我已从azure portal复制了IoT设备连接字符串,并根据文档对其进行了修改。IoT设备的连接字符串看起来像HostName=my

我正在尝试下游设备的透明网关用例。我遵循微软提供的文档。我已经在Ubuntu 18.04虚拟机上安装了azure IoT Edge运行时。IoT edge运行时通过一个自定义java模块完美运行

我已在Azure portal上使用对称密钥创建了一个物联网设备。我已将我的物联网边缘设备作为父设备添加到此物联网设备。我正在使用java示例向IoT边缘设备发送消息

我已从azure portal复制了IoT设备连接字符串,并根据文档对其进行了修改。IoT设备的连接字符串看起来像
HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyzzz

在上面的连接字符串中,myGatewayDevice是托管IoT边缘运行时的ubuntu虚拟机的主机名。当我运行这个示例时,我得到了以下异常

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)
请帮我解决这个问题。我希望通过物联网边缘设备实现通信。我们将非常感谢您的帮助

编辑1

以下是sudo openssl s_client-connect RajUbuntuVM:8883-CAfile Production/EdgeCerts/RootCACertificate/azure-iot-test-only.root.ca.cert.pem-showcerts的输出

      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
---
分辨率:

感谢沉默为我指明了正确的方向。我需要在我的java代码中添加
azure iot测试only.root.ca.cert.pem.crt
路径。对于具有对称密钥认证的设备,它们需要提供根ca证书来验证网关设备。与对称设备的Azure IoT Hub直接通信不需要此证书。

您的IoT边缘(默认情况下)为其传入连接使用自签名证书。您需要使下游设备信任该证书。请参见此处,以了解有关如何启动此功能的详细信息:


您好,我已经编辑了我的问题,并添加了有关下游设备上CA证书更新的信息。你能检查一下吗
      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
---
sudo cp <path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates