使用Node sdk- NotConnectedError将模块连接到Edge Hub时出错:无法获取本地颁发者证书

时间:2018-04-24 15:53:04

标签: node.js azure-iot-hub azure-iot-edge

Edge Module节点客户端无法通过MQTT连接到Edge Hub。它会引发证书错误 - NotConnectedError: unable to get local issuer certificate

Cert为客户设置了一个选项,

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);

1 个答案:

答案 0 :(得分:1)

如果不了解有关您环境的一些细节,我无法帮助:
你在码头工人的容器里跑吗? 您使用的基本图像是什么?
你是如何启动容器的 - 你手动启动它还是让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 = values。 gatewayHostName应该引用您的edgeHub主机。

3)验证EdgeModuleCACertificateFile中引用的证书文件是否存在,并且看起来像一个有效的PEM文件(例如,文本文件包含在----- BEGIN CERTIFICATE ----- / ----- END CERTIFICATE ----中间有一堆编码文本。)