问题描述
尝试通过 nodeJS 为边缘设备实现 TPM 配置。 https://docs.microsoft.com/en-us/azure/iot-dps/quick-create-simulated-device-x509-node 如前所述,能够生成用于测试目的的自签名证书。请帮助我,如何为生产环境生成和验证。我不太清楚术语,正在寻找做 RD 的起点。
这里是从azure-IoT-sdk节点JS派生的自签名证书验证示例代码。
var deviceCert = {
cert: fs.readFileSync(process.env.CERTIFICATE_FILE).toString(),key: fs.readFileSync(process.env.KEY_FILE).toString()
};
var transport = new Transport();
var securityClient = new X509Security(registrationId,deviceCert);
var deviceClient = ProvisioningDeviceClient.create(provisioningHost,idScope,transport,securityClient);
解决方法
如果您查看 create_test_cert.js 的源代码,您会看到您正在使用的教程中的参数创建了一个自签名证书。此外,代码使用 Math.random
而不是 crypto.randomXXX
。这对我来说是一个危险信号,但它可能什么都不是。文章说,“自签名证书仅用于测试,不应用于生产。”
安全密钥管理的话题太大,无法在堆栈溢出答案中涵盖,但从 50,000 英尺的角度来看。您想创建一个根 CA。大多数大公司在未连接到网络或特殊硬件卡中的机器上保持这些非常安全。从那里您创建一个或多个中间证书。一个常见的模式是每个产品的根 CA 的中间证书,然后是构建设备的每个工厂的产品证书的中间证书。从那里,设备证书是从中间工厂证书创建的。这样,如果第三方工厂受到威胁,您可以撤销其证书并重新颁发,而无需关闭整个产品或公司。
创建根证书和中间证书的代码在脚本中。您唯一需要做的另一件事是使用组注册向设备配置服务注册根 CA 或中间 CA。这样,所有由已注册的密钥或具有在 DPS 中注册的父密钥签名的设备密钥都可以提供。团体注册所需的所有权证明代码也在脚本中。不久前,我为 SDK 的 C 版本编写了一个类似的 bash 脚本,可以找到 here,以防万一。