Error connecting Module to Edge Hub using Node sdk- NotConnectedError: unable to get local issuer certificate
Error connecting Module to Edge Hub using Node sdk- NotConnectedError: unable to get local issuer certificate
Edge Module 节点客户端无法通过 MQTT 连接到 Edge Hub。它会抛出证书错误 - NotConnectedError: unable to get local issuer certificate
。
证书是为客户端设置的一个选项,
var certFile = process.env.EdgeModuleCACertificateFile;
var connectionString = process.env.EdgeHubConnectionString
var Protocol = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var client = Client.fromConnectionString(connectionString, Protocol);
var options = {
ca: fs.readFileSync(certFile,'utf-8').toString(),
};
client.setOptions(options,()=>{
console.log('Client transport option set');
});
client.open(connectCallback);
在不了解有关您的环境的一些详细信息的情况下,我无法提供帮助:
您 运行 在 docker 容器内吗?
您使用的是什么基础图像?
您如何启动容器——您是手动启动它还是让 EdgeAgent 为您启动它?
您可以尝试的一些事情:
1) 确认您使用的是@modules-preview 代码。 NPM 使这很容易出错。
PS F:\temp> npm list | findstr "azure-iot"
+-- azure-iot-device-mqtt@1.4.0-modules-preview
| +-- azure-iot-common@1.5.0-modules-preview
| +-- azure-iot-device@1.4.0-modules-preview
| | +-- azure-iot-http-base@1.3.3-modules-preview
| +-- azure-iot-mqtt-base@1.3.3-modules-preview
2) 确认您的连接字符串格式正确。它需要有 moduleId= 和 gatewayHostName= 值。 gatewayHostName 应该引用您的 edgeHub 主机。
3) 验证 EdgeModuleCACertificateFile 中引用的证书文件是否存在并且看起来像一个有效的 PEM 文件(例如包含在 -----BEGIN CERTIFICATE-----/-----END CERTIFICATE---- 中的文本文件,带有一堆行之间的编码文本)。
Edge Module 节点客户端无法通过 MQTT 连接到 Edge Hub。它会抛出证书错误 - NotConnectedError: unable to get local issuer certificate
。
证书是为客户端设置的一个选项,
var certFile = process.env.EdgeModuleCACertificateFile;
var connectionString = process.env.EdgeHubConnectionString
var Protocol = require('azure-iot-device-mqtt').Mqtt;
var Client = require('azure-iot-device').Client;
var client = Client.fromConnectionString(connectionString, Protocol);
var options = {
ca: fs.readFileSync(certFile,'utf-8').toString(),
};
client.setOptions(options,()=>{
console.log('Client transport option set');
});
client.open(connectCallback);
在不了解有关您的环境的一些详细信息的情况下,我无法提供帮助:
您 运行 在 docker 容器内吗?
您使用的是什么基础图像?
您如何启动容器——您是手动启动它还是让 EdgeAgent 为您启动它?
您可以尝试的一些事情:
1) 确认您使用的是@modules-preview 代码。 NPM 使这很容易出错。
PS F:\temp> npm list | findstr "azure-iot"
+-- azure-iot-device-mqtt@1.4.0-modules-preview
| +-- azure-iot-common@1.5.0-modules-preview
| +-- azure-iot-device@1.4.0-modules-preview
| | +-- azure-iot-http-base@1.3.3-modules-preview
| +-- azure-iot-mqtt-base@1.3.3-modules-preview
2) 确认您的连接字符串格式正确。它需要有 moduleId= 和 gatewayHostName= 值。 gatewayHostName 应该引用您的 edgeHub 主机。
3) 验证 EdgeModuleCACertificateFile 中引用的证书文件是否存在并且看起来像一个有效的 PEM 文件(例如包含在 -----BEGIN CERTIFICATE-----/-----END CERTIFICATE---- 中的文本文件,带有一堆行之间的编码文本)。