尝试将node.js应用程序连接到AWS IoT,但显示错误“无法获取本地发行者证书”

时间:2019-06-12 14:32:05

标签: node.js certificate aws-iot root-certificate

我正在尝试使用aws-iot-device-sdk从node.js应用程序连接到AWS IoT。我想将消息发布到AWS MQTT Broker。 但是,我不断收到一条错误消息,提示“无法获得本地发行者证书”

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上的第一篇文章。因此,非常感谢你们中的任何一个可以帮助我或者为我指明方向。

0 个答案:

没有答案