使用CA证书对设备公钥进行数字签名

时间:2019-02-08 11:26:16

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

我正在尝试向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 =未使用”
  2. openssl req -nodes -newkey rsa:2048 -days 365 -keyout device.key -out device.csr -subj“ / CN =未使用”
  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 =未使用”
  2. openssl genrsa -out device.key 2048
  3. openssl req -new -days 365 -key device.key -out device.csr -subj“ / CN =未使用”
  4. openssl x509 -req -days 365 -in device.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out device.crt

在两种情况下都可以很好地创建证书,但是当我尝试使用此证书注册设备时,出现错误,指出无法对照CA证书验证设备证书。

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

非常感谢!

2 个答案:

答案 0 :(得分:0)

选项1看起来正确,如此处所述:https://cloud.google.com/iot/docs/how-tos/credentials/keys

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

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

除非出于特定的安全性原因需要拥有一个证书,否则请删除拥有的所有注册表级别证书,并仅使用创建的密钥注册设备。

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

答案 1 :(得分:0)

感谢您的答复。我确实需要注册表证书,以确保未注册欺诈性设备。经过数小时的反复试验,当我指定一个有效的subj而不是“ / CN = unused”时,它终于可以工作了。不幸的是,Google文档没有说明这可能是一个问题。不过,签名过程是正确的。