【问题标题】:X509_check_private_key:key values mismatch error: DPS ,IOT hubX509_check_private_key:key values mismatch error: DPS ,IOT hub
【发布时间】:2020-12-19 09:02:10
【问题描述】:

我无法在 node.js 的 IOT 集线器上创建设备。我已将配置主机替换为全局设备端点,将 idScope 替换为我的 DPS 的 ID 范围。我正在使用带有 x.509 证书的组注册,因此我使用证书的主题名称作为 registrationId 的值。我还将我的 IoT 中心链接到设备配置服务。

var provisioningHost = "global.azure-devices-provisioning.net"; 
var idScope = "6n*******3"; //Replace id scope with the ID Scope
var **registrationId** = "Azure IoT CA TestOnly Root CA"; 
var deviceCert = {
  cert: fs.readFileSync("./IOTProj_cert.pem").toString(), 
  key: fs.readFileSync("./IOTProj_key.pem").toString()
};

我正在执行 azure-iot-sdk-node/provisioning/device/samples/register_x509.js 文件但出现以下错误:

PS D:\TestNode\azure-iot-sdk-node-master\provisioning\device\samples> 节点 .\register_x509.js
_tls_common.js:149

错误:错误:0B080074:x509 证书例程:X509_check_private_key:键值不匹配 在 Object.createSecureContext (_tls_common.js:149:17) 在 Object.connect (_tls_wrap.js:1582:48) 在 Object.buildBuilder (D:\TestNode\azure-iot-sdk-node-master\provisioning\device\samples\node_modules\mqtt\lib\connect\tls.js:17:20) 在 MqttClient.wrapper [作为 streamBuilder] (D:\TestNode\azure-iot-sdk-node-master\provisioning\device\samples\node_modules\mqtt\lib\connect\index.js:153:36) 在 MqttClient._setupStream (D:\TestNode\azure-iot-sdk-node-master\provisioning\device\samples\node_modules\mqtt\lib\client.js:298:22)
library: 'x509 证书例程', 功能:'X509_check_private_key', 原因:'键值不匹配', 代码:'ERR_OSSL_X509_KEY_VALUES_MISMATCH' }

我正在关注以下链接

创建测试证书: Managing test CA certificates for samples and tutorials

create-simulated-device-x509-nodeJS#Simulate the device

IoT Hub Device Provisioning Service device concepts#Registration ID

Samples for the Azure IoT Device Provisioning Device SDK for Node.js

编辑-我想使用群组注册。

【问题讨论】:

    标签: node.js x509 azure-iot-hub azure-iot-dps


    【解决方案1】:

    从上面的代码来看,您似乎使用“Azure IoT CA TestOnly Root CA”作为registrationId?registrationId应该是设备证书本身的cn/subject(无论您传递到'./certGen. sh create_device_certificate'命令),而不是根证书CA。“IOTProj_cert.pem”是什么证书?是设备的证书?还是根CA证书?

    【讨论】:

    • 我正在关注 (docs.microsoft.com/en-us/azure/iot-dps/…)。我创建了叶子 X.509 证书(IOTProj_cert.pem 和 IOTProj_key.pem)。根据(docs.microsoft.com/en-us/azure/iot-dps/…),我已将registrationID 作为证书的主题名称。我不确定我的情况应该是什么registrationID。我正在使用 x.509 证书,并且我已经完成了组注册。
    • 上面的代码是你使用的实际代码吗?具体来说,您是否将其用于您的注册 ID? var registrationId = "Azure IoT CA TestOnly 根 CA";这是不对的......当你运行这个命令时: node create_test_cert.js device {certificate-name} 你为 {certificate-name} 传递了什么?这就是您应该为您的registrationId使用的内容。如果您通过了“Azure IoT CA TestOnly Root CA”,那么这不是一个有效的名称(没有空格等)。您可以运行此命令并粘贴输出(来自带有您的证书的文件夹)吗? openssl x509 -in ./IOTProj_cert.pem -text
    • 在执行 node create_test_cert.js device TestAirtube 后创建了通用名称=TestAirtube 的证书和名为 testAirtube_cert.pem.、testAirtube_key.pem.和 testAirtube_fullchain.pem.的 3 个文件。 .所以我使用 var registrationId = "TestAirtube"; var deviceCert = { cert: fs.readFileSync("./TestAirtube_cert.pem").toString(), key: fs.readFileSync("./TestAirtube_key.pem" ).toString() };但是命令 node .\register_x509.js 它没有给出任何输出。
    • 不知道为什么脚本没有给出任何输出.. 对于 ./TestAirtube_cert.pem 你可以安装使用完整的链版本 ./testAirtube_fullchain.pem 吗?我认为您需要完整的链证书
    • 我尝试使用 cert: fs.readFileSync("./TestAirtube_fullchain.pem").toString() 仍然是同样的问题。代码没有给我任何输出。
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多