AWS IoT Connection error : Invalid "caCert" option supplied with aws-iot-device-sdk
AWS IoT Connection error : Invalid "caCert" option supplied with aws-iot-device-sdk
我在 AWS 中配置了一个设备证书,该证书由我的 CA 签名。另外,我之前已经在 AWS 中注册了我的 CA 和 verificationCert。
现在当我发送数据时,在选项中,
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" 选项无效。
任何人都可以让我知道我在上面的代码片段中哪里做错了吗?
编辑1:
在选项中进行更正后,下面是代码:
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') 中的语句没有被执行。
我只能看到 "Invoking on connect" 正在打印
编辑 2:问题已解决!!!
创建设备时,我必须将策略附加到它。
然后我可以通过带有证书的 MQTT 以上述指定方式发送数据。
doc 意味着您应该将路径传递给 TLS 证书和密钥的文件。
例如
var device = awsIot.device({
keyPath: <YourPrivateKeyPath>,
certPath: <YourCertificatePath>,
caPath: <YourRootCACertificatePath>,
clientId: <YourUniqueClientIdentifier>,
host: <YourCustomEndpoint>
});
稍后在同一个 doc 中它说 caCert
可以是缓冲区(不是字符串)
caCert
: same as caPath, but can also accept a buffer containing CA certificate data
这意味着您需要先解码字符串值。
我在 AWS 中配置了一个设备证书,该证书由我的 CA 签名。另外,我之前已经在 AWS 中注册了我的 CA 和 verificationCert。
现在当我发送数据时,在选项中,
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" 选项无效。
任何人都可以让我知道我在上面的代码片段中哪里做错了吗?
编辑1: 在选项中进行更正后,下面是代码:
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') 中的语句没有被执行。 我只能看到 "Invoking on connect" 正在打印
编辑 2:问题已解决!!!
创建设备时,我必须将策略附加到它。 然后我可以通过带有证书的 MQTT 以上述指定方式发送数据。
doc 意味着您应该将路径传递给 TLS 证书和密钥的文件。
例如
var device = awsIot.device({
keyPath: <YourPrivateKeyPath>,
certPath: <YourCertificatePath>,
caPath: <YourRootCACertificatePath>,
clientId: <YourUniqueClientIdentifier>,
host: <YourCustomEndpoint>
});
稍后在同一个 doc 中它说 caCert
可以是缓冲区(不是字符串)
caCert
: same as caPath, but can also accept a buffer containing CA certificate data
这意味着您需要先解码字符串值。