我正在尝试向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
- openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout ca.key -out ca.crt -subj“ / CN =未使用”
- openssl req -nodes -newkey rsa:2048 -days 365 -keyout device.key -out device.csr -subj“ / CN =未使用”
- openssl x509 -req -days 365 -in device.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out device.crt
选项2
- openssl req -new -x509 -nodes -days 365 -newkey rsa:2048 -keyout ca.key -out ca.crt -subj“ / CN =未使用”
- openssl genrsa -out device.key 2048
- openssl req -new -days 365 -key device.key -out device.csr -subj“ / CN =未使用”
- 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文档没有说明这可能是一个问题。不过,签名过程是正确的。