我尝试使用Mqtt在Azure IoT中心上发布一些数据。 我使用SAS令牌成功发布了一些数据。
但我的客户想要x509自生成&自签名证书。 Azure支持这一点,但没有提供有关它的大量信息。 (https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-security#supported-x509-certificates)
自行生成并自签名的X-509证书。设备 制造商或内部部署者可以生成这些证书和 将相应的私钥(和证书)存储在设备上。 您可以使用OpenSSL和Windows SelfSignedCertificate等工具 为此目的的实用程序。
注意 IoT Hub仅需要或不存储整个X.509证书 指纹。
我所做的是创建了CA证书和密钥。
$openssl req -newkey rsa:2048 -x509 -nodes -sha256 -days 365 -extensions v3_ca -keyout ca.key -out ca.crt
创建了客户端密钥和签名请求
$openssl genrsa -out client.key 2048
$openssl req -new -sha256 -out client.csr -key client.key
签署请求并创建证书
$openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl -out client.crt -days 365
我已将客户端密钥和证书上传到调制解调器。 并插入客户端证书的指纹。
我的调制解调器可以成功连接到myhub.azure-devices.net/deviceId (port 8883)
但是当新数据到达时,它无法对其进行解码。
我从这一点开始就被困住了。我试过使用MqttFx,但没有运气。
有人能把我推向正确的方向吗?
答案 0 :(得分:3)
我已经解决了这个问题:
配置的CA证书必须是azure证书:CA Root Certificate Azure SDK。我使用过巴尔的摩根证书。
客户端证书和密钥是正确的。必须将客户端证书的SHA1指纹传送到Azure IoT中心。
我已将Paho用作Mqtt客户端。
最后,我在连接服务器时出现调制解调器错误。调制解调器内部的时间显然仍处于默认状态(1-1-2004),并且调制解调器使用当前时间(1-1-2004)检查证书的时间,这是无效的,因此无法建立连接。
答案 1 :(得分:3)
对于那些想要使用Azure IoT C#SDK的人,我已经创建了一个基于C#的代码示例,该示例向您展示了如何将OpenSSL自签名和自生成的X509证书与在Azure中注册的设备相关联IoT Hub,然后在后续运行时操作中使用证书(主要或次要) - 特别是发送遥测消息。
您可以选择使用MQTT或HTTPS作为传输层。