生成生产 x509 证书

Generate production x509 certificate

尝试通过 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,以防有帮助。