我尝试使用 aws-iot-device-sdk 从 node.js 应用程序连接到 AWS IoT。我想将消息发布到 AWS MQTT 代理。 但是,我不断收到错误消息“无法获取本地颁发者证书”
events.js:174
throw er; // Unhandled 'error' event
^
Error: unable to get local issuer certificate
at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34)
at TLSSocket.emit (events.js:189:13)
at TLSSocket.EventEmitter.emit (domain.js:441:20)
at TLSSocket._finishInit (_tls_wrap.js:633:8)
Emitted 'error' event at:
at MqttClient.<anonymous> (/Users/****/node_modules/aws-iot-device-sdk/device/index.js:808:12)
at MqttClient.emit (events.js:189:13)
at MqttClient.EventEmitter.emit (domain.js:441:20)
at TLSSocket.handleTLSerrors (****/node_modules/aws-iot-device-sdk/device/lib/tls.js:29:18)
at TLSSocket.emit (events.js:194:15)
at TLSSocket.EventEmitter.emit (domain.js:441:20)
at emitErrorNT (internal/streams/destroy.js:82:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
我已经创建了我的设备(没有真实的设备,只是模仿),在 AWS IoT 中注册它,创建证书、私钥和公钥,并向证书添加策略。
我还从 https://www.amazontrust.com/repository/AmazonRootCA1.pem 下载了 Amazon Root CA 1 .
现在我的问题来了(抱歉,如果这是一个愚蠢的问题):如何、以什么格式保存证书?我只是将文本复制到一个文件中,并将该文件命名为 root_ca.pem 。
我还尝试了不同格式的密钥和证书(xxx.key.pem 或 root_ca.crt)。
const topic = 'uniqueClientId/#/1/' + anotherUniqueId + '/myTopicName';
AWS.config.region = 'us-east-1';
let device = awsIot.device({
keyPath: './Certs/****-private.key',
certPath: './Certs/****-certificate.pem',
caPath: './Certs/root_ca.pem',
clientId: 'myUniqueClientId',
host: 'myhost.iot.us-east-1.amazonaws.com' // NOTE: got this value with `aws iot describe-endpoint`
});
device
.on('connect', function() {
console.log('connect');
device.publish(topic, JSON.stringify({ test_data: 1}));
});
我希望看到的是 Amazon 控制台中 MQTT Broker 中的测试消息。
但我似乎无法成功连接到 AWS IoT。
如有遗漏,请多多包涵。我是个初学者,这是我在 StackOverflow 上的第一篇文章。因此,如果你们中有人能帮助我或为我指明方向,我将不胜感激。
自从我将节点运行时从 14 升级到 16+ 以来,我开始在我的 node.js lambda 处理程序上看到此错误。使用适用于 javascript 的 aws sdk v3 解决了我的问题。
https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/iot/