AWS IoT Ошибка подключения: неверная опция «caCert» поставляется с aws -iot-device-sdk - PullRequest
1 голос
/ 11 апреля 2020

Я снабдил устройство в AWS сертификатом устройства, подписанным моим ЦС. Кроме того, я зарегистрировал свой CA вместе с validCert в AWS ранее.

Теперь, когда я отправляю данные, в опциях

var awsIot = require('aws-iot-device-sdk');
var device = awsIot.device({
privateKey: '--BEGIN RSA PRIVATE KEY--', //private key of my device
clientCert: '--BEGIN CERTIFICATE --', //cat deviceCertificate and registered CA 
caCert: '--BEGIN CERTIFICATE--', //Amazon root CA
clientId: 'Thing01',
region: 'us-west-2',
host: xxxxxxxx.iot.us-west-2.amazonaws.com,
secretKey: 'dcvevv',
accessKeyId: 'ferferer'
});

device.on('connect',function(err){
device.publish('$aws/things/Thing01/shadow/update',JSON.stringify({
"state" :{
  "desired": {
 "color": "blue"
 }
}
})
);
})

Я получаю ошибку ниже

выбросить новую ошибку (exceptions.INVALID_CA_CERT_OPTION); ^ Ошибка: предоставлена ​​неверная опция «caCert».

Может кто-нибудь сообщить мне, где я делаю ошибку в приведенном выше фрагменте кода?

Edit1: после внесения исправлений в параметры ниже код:

    var awsIot = require('aws-iot-device-sdk');
    var device = awsIot.device({
    host:'xxxxx.iot.us-west-2.amazonaws.com',
    keyPath : './certs/deviceTest/5e2570c0605418.key',  
    certPath : './certs/deviceTest/5e2570c0605418AndCA.crt',   //cat of device and Registered CA
    caPath : './certs/rootCA.pem', //public cert of AWS root CA1 
    clientId: 'ManualDevice_01', //ThingName
    region : 'us-west-2',
   secretKey: 'xxxxxxxxxxxx',
   accessKeyId: 'xxxxxxxxxxxxxxxx'
  }); 
   console.log("Invoking on connect");
   device.on('connect',function(error ){
    console.log("In on connect !!");
    if(error)
       console.log('could not connect');
  device.publish('$aws/things/ManualDevice_01/shadow/update',JSON.stringify({
  "state" : {
    "desired" : {
        "color" : "pink",
        "power" : "off",
        "val":"1"
     }
    }
   } ), function(err){
   if(err)
      console.log("Could not send : Error : "+err)
   else
   {
      console.log("Sent data")
   } 
   }
  );
 console.log('Message sent........')
 })
 device.on('message',function(topic,payload){
     console.log('message',topic,payload.toString());
  })

Операторы внутри device.on ('connect') не выполняются. Я мог видеть только «Вызов при подключении» при печати

Редактировать 2: Проблема решена !!!

При создании устройства я должен присоединить к нему Политику. Затем я могу отправить данные указанным выше способом через MQTT с сертификатами.

1 Ответ

1 голос
/ 11 апреля 2020

do c подразумевает, что вы должны передавать пути к файлам для сертификата и ключа TLS.

например,

var device = awsIot.device({
   keyPath: <YourPrivateKeyPath>,
  certPath: <YourCertificatePath>,
    caPath: <YourRootCACertificatePath>,
  clientId: <YourUniqueClientIdentifier>,
      host: <YourCustomEndpoint>
});

Позже в то же самое do c говорит, что caCert может быть буфером (не строкой)

  • caCert: то же самое, что и caPath, но также может принимать буфер, содержащий данные сертификата CA

Это означает, что сначала вам нужно будет декодировать строковое значение.

...