go - GCP IoT 核心拒绝此 RSA_PEM 公钥并出现错误
问题描述
我尝试开发一种自动化来使用公共 RSA pem 证书注册新的 IoT 设备,但我有一个问题,我不知道原因。
问题是生成了 RSA_PEM 公共 pem,我的自动化被 GCP IoT Server 拒绝并出现错误。该错误是“位置 1 的设备凭据的密钥数据无效。确保格式正确:无效的 RS256 公钥”
当我调试我的代码时,pem 公共证书看起来很好。但我不确定。
我正在共享生成成对的私有和公共证书的 go 代码。
package cert
import (
"bytes"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"io"
)
type CertificateRSA struct {
Private io.Reader
Public io.Reader
}
func Create() (*CertificateRSA, error) {
bitSize := 2048
key, err := rsa.GenerateKey(rand.Reader, bitSize)
if err != nil {
return nil, err
}
var privateKey = &pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(key),
}
var priBuff bytes.Buffer
err = pem.Encode(&priBuff, privateKey)
if err != nil {
return nil, err
}
// asn1Bytes := x509.MarshalPKCS1PublicKey(&key.PublicKey)
asn1Bytes := x509.MarshalPKCS1PublicKey(&key.PublicKey)
var publicKey = &pem.Block{
Type: "PUBLIC KEY",
Bytes: asn1Bytes,
}
var pubBuff bytes.Buffer
err = pem.Encode(&pubBuff, publicKey)
return &CertificateRSA{
Private: &priBuff,
Public: &pubBuff,
}, err
}
你能在我的代码中看到任何问题吗?
这段代码可以生成如下证书:
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA0FGWENPInhIfCLDTqCFKFsyrvmzKsEjJtHEL0Tqh0LtHDWG5
Sh7MT7/x/xNAFc00zmgGG+PPaJDP/7gkGJitRAXcJOlKwlowgmVTf+QGwH81pq3o
ZNRd0mEXbF0EuPBRNt/9TzkZPAlPDGruMCiMq9LWsoIflx+u/3UmXgsyMQTs5vSM
z4T5VCELHGCtfZfBrDAP19KzwjFEUTEzX+Llotp0mO6+cRCslVvSK3xd8KIk2cOm
AXEmCavZnwuVsqCVmNZFoQZvFszisMf5cXZRDstKCGsqDgqIGM5dMMrBS92CqZ4u
j6h9zbMG7J9oXsVmVFiQ++hS0TLJdWwMD+uhWQIDAQABAoIBAAbKIfH6dRdxz8Eg
wkVAkIGduhtCwHhuZuSSqqfvGUcMU4yEGt3nkxEmWGTP487SGV6A1XIjQqdN0Pms
rsB+eWc2Ka6qS915wwr88nPAotezTbRZBrICmew5beICRh0g+ASp2D+0xLXIN+NX
uNuo9qzC+mxnAVCTn8iDsPRvuPsP9vJSy5zIzPWURdPBQ3Ny1pbj+odqwDdUw8q7
FfUmGHC7a5oKex3vxDhDL8OPc3KjynFJdm1YqUagLzppDHMZtI2rNAYfWrkrJVB7
zlX3m0hUDDrvHbQBiqGUj2qI2MqgrFlcK0HSryJdCz4tVdYY3qBi/tZrwOAvnSkv
zNFT6AECgYEA9veJpGwUYdRhWyo05xsatDJ+KvBpizi66Iu2Lu+fRQUuwYaC0DSV
BMr1ktbJzbgbu4XDNrJ8GKrqka06vGjaYVhw1C56LU83hHsckTx+K3fpb9wkFamE
gCZG3uAqflLsEPZ6xPHLe1U+SDZfghLrH90JYi7tTULReAVy5zVs8iECgYEA1/Aq
6ls9kPtJWLEU299WdNGYy5Fx1N8oUj5sjYTfPf/27OeBXWg+CKBIhXk534z9pwqq
LUs7NbmqhuocuxFtE7oxdwqXqUR7qYUdpVuRZ8EmVvBuUGxI1MG6MMKxHxSSpTs5
3tTDAd2WlwPX3jbqAj2WOiL2T97cXNjYyKxiuDkCgYBbI0RnKf9njtGSrAOz2XvE
TfHjdK7uUrQfBxfnQER9WwlDH5l8rjrj9uYjFyKHyU5qqFU/BSTokYJY2h2X0/Xr
AJE6rCAoQliRikEjk7hX4DuELTAf0lv0UqvKqdzkm0NEi0EJFtXpoK6IRZB/Vu3v
50kEM58c6PCWIyShEEUxIQKBgQCg63qf0UTNMWaUcMqxm/sq7TNnqMjisTa0K47r
27Qd2Q1juJZATLnF5eSFizSkssYoYJs3S9QhEm7RQdANXEwkImJQaxVgcAeT6f6Q
xu9SGa9/pIcg6cFQw9oEEmK6XbN27O8Qbw+v6Tka6yNIlzXGW60DQCC8nsErc/IB
ge3DiQKBgA3183wzRLj7oZD/KJHW+BY0Y6ljZ8EQQ5anc3RFsQrJ48MdPtRNvC49
Oe0T2lRznVdiPcGY8DKlBMYXQ4jiXZxpWmM8jNkJYPBhx9rq8zBDESo8DKSFd1Jo
lNADlBGDEPYgxG29hnSOrBf5TI1Fkj15RVZOJ79uaefp98ACIgkl
-----END RSA PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MIIBCgKCAQEA0FGWENPInhIfCLDTqCFKFsyrvmzKsEjJtHEL0Tqh0LtHDWG5Sh7M
T7/x/xNAFc00zmgGG+PPaJDP/7gkGJitRAXcJOlKwlowgmVTf+QGwH81pq3oZNRd
0mEXbF0EuPBRNt/9TzkZPAlPDGruMCiMq9LWsoIflx+u/3UmXgsyMQTs5vSMz4T5
VCELHGCtfZfBrDAP19KzwjFEUTEzX+Llotp0mO6+cRCslVvSK3xd8KIk2cOmAXEm
CavZnwuVsqCVmNZFoQZvFszisMf5cXZRDstKCGsqDgqIGM5dMMrBS92CqZ4uj6h9
zbMG7J9oXsVmVFiQ++hS0TLJdWwMD+uhWQIDAQAB
-----END PUBLIC KEY-----
解决方案
如果你得到:
Error: 7 PERMISSION_DENIED: The signature of device credential in position 0 could not be verified against any registry certificate.
错误并且您的系统曾经正常工作,请检查根 CA 证书的到期日期。如果超过日期,它将返回此错误。
推荐阅读
- entity-framework - 在 linq Entity Framework Core 中使用 Join
- python - 正则表达式无法排除带有换行符的匹配项
- python - 对动态范围内的列求和
- javascript - 用javascript处理表单提交时formdata事件的目的是什么?
- sql - Postgresql左连接问题
- flash - 使用 OpenFL 将 Haxe Flash 应用程序编译到 Adobe AIR
- javascript - Vue过渡动画不播放但保持其动画持续时间
- ios - Swift CollectionView ReloadData 暂时更改顺序
- javascript - 如何让 onclick 事件用于更改 CSS 属性?
- python - 使用 matplotlib 为不同的 y 值创建带有彩色线条的折线图