【问题标题】:Digitally signing a device public key with CA certificate使用 CA 证书对设备公钥进行数字签名
【发布时间】:2019-07-02 15:16:59
【问题描述】:

我正在尝试向 Google Cloud IoT Core 注册 IoT 设备,但在使用安装在 Google Cloud 上的 CA 证书(设备注册表)签署设备公钥时遇到问题。

以下是 Google 的要求:

  • CA 和设备证书必须是 X.509v3,以 base64 编码,包装在 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 中。
  • CA 证书不需要自签名(“根 CA”);设备证书必须由注册表级别的特定 CA 证书签名。
  • Cloud IoT Core 拒绝未由注册表级证书签名的设备公钥。
  • CA 和设备证书必须采用 PEM 格式

在查看 StackOverflow 和其他地方的先前响应后,这是我迄今为止尝试过的(使用默认配置文件):

选项 1

  1. openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout ca.key -out ca.crt -subj "/CN=unused"
  2. openssl req -nodes -newkey rsa:2048 -days 365 -keyout device.key -out device.csr -subj "/CN=unused"
  3. openssl x509 -req -days 365 -in device.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out device.crt

选项 2

  1. openssl req -new -x509 -nodes -days 365 -newkey rsa:2048 -keyout ca.key -out ca.crt -subj "/CN=unused"
  2. openssl genrsa -out device.key 2048
  3. openssl req -new -days 365 -key device.key -out device.csr -subj "/CN=unused"
  4. openssl x509 -req -days 365 -in device.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out device.crt

在这两种情况下都可以正常创建证书,但是当我尝试使用此证书注册设备时,我收到一条错误消息,指出无法根据 CA 证书验证设备证书。

签署设备证书时我做错了什么?您可以忽略 Cloud IoT 配置,因为我已经验证它可以工作(没有 CA 证书)。

非常感谢!

【问题讨论】:

  • openssl req -x509 -newkey rsa:2048 -days 3650 -keyout rsa_private.pem -nodes -out rsa_public.pem -subj "/CN=unused" 后跟gcloud iot devices create test-dev --region=us-central1 --registry=tour-registry --public-key path=rsa_public.pem,type=rs256
  • 问题是你试图成为你自己的 CA,但会失败。只需创建密钥对。

标签: google-cloud-platform openssl certificate x509certificate google-cloud-iot


【解决方案1】:

选项 1 看起来是正确的,正如这里提到的:https://cloud.google.com/iot/docs/how-tos/credentials/keys。

听起来您指定了注册表级别的证书。

这意味着,除了像您一样创建密钥对之外,您还需要使用您在注册表级别指定的证书注册公钥。这真的让 IMO 感到困惑,而且在大多数情况下,没有必要。

除非出于特定于您的设置的安全原因需要拥有一个,请删除您拥有的任何注册表级证书,然后使用创建的密钥注册设备。

如果不是这样,请验证您在创建设备时是否使用 x509 包装器指定了 RSA 密钥(有 RS256、ES256、RS256_X509、ES256_X509 选项)。在我使用 X509 之前,我肯定已经这样做了,但偶然指定了 RSA。

【讨论】:

    【解决方案2】:

    感谢您的回复。我确实需要注册证书来确保不注册欺诈设备。经过数小时的反复试验,当我指定一个有效的主题而不是“/CN=unused”时,它最终起作用了。不幸的是,谷歌文档没有说明这可能是一个问题。不过签名过程是正确的。

    【讨论】:

    • 我正在尝试设置一个设备以在第一次启动时创建自己(使用来自@google-cloud/iot npm 包的iot.createDevice)。从文档中不清楚 openssl 命令中 -subj 标志的用途,或者当设备尝试创建自身时它是如何被合并的。你或@GabeWeiss 能更详细地解释一下吗?
    猜你喜欢
    • 2014-02-17
    • 2018-03-20
    • 2016-02-27
    • 2016-01-27
    • 2019-11-30
    • 2017-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多