如何使用x.509证书将数据从Raspberry Pi发送到Azure IoT Hub

41zrol4v  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(131)

我正在尝试使用此GitHub存储库(https://github.com/Azure-Samples/azure-iot-samples-node/tree/master/iot-hub/Tutorials/RaspberryPiApp)中的代码将数据从我的Raspberry Pi发送到Azure IoT Hub。但是,我希望使用x.509证书而不是Azure IoT Hub设备连接字符串。我认为我必须修改index.js文件,但我不确定要更改什么,请帮助。

xuo3flqw

xuo3flqw1#

为了在x.509身份验证中使用该代码,您需要cert.pem和key.pem文件。我已经按照文章Quickstart: Provision an X.509 certificate simulated device中概述的步骤使用脚本生成了以下证书集。

我继续执行本文中的步骤,使用上面步骤中生成的设备证书在Azure门户上配置设备。
我将为Raspberry Pi设备生成的证书复制到放置index.js文件的同一目录中。我修改了index.js文件的initClient函数的x509部分,如下所示,以使用证书。

if (connectionString.x509) {
// Read X.509 certificate and private key.
// These files should be in the current folder and use the following naming convention:
// [device name]-cert.pem and [device name]-key.pem, example: myraspberrypi-cert.pem
var connectionOptions = {
  cert: fs.readFileSync('/home/rajesh/NodeApp/rasbpi-device-cert.pem', 'utf-8').toString(),
  key: fs.readFileSync('/home/rajesh/NodeApp/rasbpi-device-key.pem', 'utf-8').toString(),
  passphrase: '1234'
};
client = Client.fromConnectionString(connectionStringParam, MqttProtocol);
client.setOptions(connectionOptions);

console.log('[Device] Using X.509 client certificate authentication');
}

请注意,我在这个例子中使用了MQTT协议。当我用AMQP协议测试时,我发现了一个错误。我不确定这是否与我用来生成证书的方法有关。
如果您在生成证书时设置了密码短语,则可以将空字符串传递给参数,如下文connectionOptions声明中的''所示。
您可以从Raspberry Pi使用以下命令运行该文件
sudo node index.js 'HostName=<YourHubName>.azure-devices.net;DeviceId=<deviceId>;x509=true'
请查找我使用证书运行文件时得到的输出。

相关问题