You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用X.509证书从树莓派向Azure IoT Hub发送数据

把树莓派发送数据到Azure IoT Hub的代码改为X.509证书认证

核心修改点:替换连接字符串为X.509证书初始化客户端

原代码用DeviceClient.fromConnectionString创建连接,我们要改成基于X.509证书的初始化方式,具体修改步骤如下:

1. 先准备好证书文件

确保树莓派上有这几个文件(路径可自行调整):

  • 设备PEM格式证书:比如device-cert.pem
  • 设备PEM格式私钥:比如device-key.pem
  • 可选:CA根证书(如果IoT Hub使用自定义CA,或需要验证服务器证书)

2. 修改index.js的代码

2.1 引入文件读取模块

在文件开头添加fs模块,用来读取本地证书文件:

const fs = require('fs');

2.2 删除连接字符串,配置证书参数

删掉原来的connectionString变量,替换成你的IoT Hub主机名、设备ID和证书路径:

// 替换成你的实际信息
const iotHubHostname = '你的IoT Hub主机名,比如xxx.azure-devices.net';
const deviceId = '你的设备ID';
const deviceCertPath = './device-cert.pem'; // 你的设备证书路径
const deviceKeyPath = './device-key.pem';   // 你的设备私钥路径
// 可选:如果需要CA根证书,取消下面注释并填写路径
// const caCertPath = './AzureIoTHubCA.crt.pem';

2.3 替换客户端初始化代码

把原来用连接字符串创建客户端的代码,换成X.509证书的方式:

// 替换原Client.fromConnectionString这一行
const client = Client.fromX509Certificate(
  {
    hostName: iotHubHostname,
    deviceId: deviceId,
    x509: {
      cert: fs.readFileSync(deviceCertPath, 'utf-8'),
      key: fs.readFileSync(deviceKeyPath, 'utf-8')
    },
    // 可选:需要CA根证书的话取消下面注释
    // ca: fs.readFileSync(caCertPath, 'utf-8')
  },
  Protocol
);

3. 确保设备在IoT Hub已注册X.509证书

登录Azure门户,找到你的IoT Hub和对应设备,确认设备的认证方式为X.509,并且已经上传了对应的证书(自助签名或CA签名均可)。

完整修改后的代码片段参考

'use strict';

const fs = require('fs');
const Client = require('azure-iot-device').Client;
const Message = require('azure-iot-device').Message;
const Protocol = require('azure-iot-device-mqtt').Mqtt;

// X.509认证配置
const iotHubHostname = 'your-hub-name.azure-devices.net';
const deviceId = 'your-device-id';
const deviceCertPath = './device-cert.pem';
const deviceKeyPath = './device-key.pem';

// 创建X.509客户端
const client = Client.fromX509Certificate(
  {
    hostName: iotHubHostname,
    deviceId: deviceId,
    x509: {
      cert: fs.readFileSync(deviceCertPath, 'utf-8'),
      key: fs.readFileSync(deviceKeyPath, 'utf-8')
    }
  },
  Protocol
);

// 原有连接和发送消息的逻辑完全保留
client.open((err) => {
  if (err) {
    console.error('连接失败: ' + err.message);
  } else {
    console.log('客户端已连接');

    setInterval(() => {
      const temperature = 20 + (Math.random() * 15);
      const humidity = 60 + (Math.random() * 20);
      const data = JSON.stringify({ temperature: temperature, humidity: humidity });
      const message = new Message(data);
      message.properties.add('temperatureAlert', (temperature > 30) ? 'true' : 'false');
      console.log('发送消息: ' + message.getData());
      client.sendEvent(message, (err) => {
        if (err) {
          console.error('发送消息出错: ' + err.message);
        } else {
          console.log('消息发送成功');
        }
      });
    }, 2000);
  }
});

内容的提问来源于stack exchange,提问作者melain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:15:34