亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GCP IoT 核心拒絕此 RSA_PEM 公鑰并出現錯誤

GCP IoT 核心拒絕此 RSA_PEM 公鑰并出現錯誤

Go
繁星淼淼 2023-06-26 15:46:18
我嘗試開發一個自動化程序來使用公共 RSA pem 證書注冊新的 IoT 設備,但我遇到了一個問題,我不知道原因。問題是生成了 RSA_PEM public pem 我的自動化被 GCP IoT Server 拒絕并出現錯誤。該錯誤是“位置 1 中設備憑證的密鑰數據無效。請確保格式正確:RS256 公鑰無效”當我調試我的代碼時,pem 公共證書看起來很好。但我不確定。我正在分享生成成對的私有和公共證書的 go 代碼。package certimport (    "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}你能看出我的代碼有什么問題嗎?
查看完整描述

4 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

如果您得到:

Error: 7 PERMISSION_DENIED: The signature of device credential in position 0 could not be verified against any registry certificate.

錯誤并且您的系統曾經正常工作,請檢查根 CA 證書的到期日期。如果超過該日期,它將返回此錯誤。


查看完整回答
反對 回復 2023-06-26
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

我遇到了同樣的問題。我可以用下面的代碼解決這個問題。


package cloudIotCore


import (

    "crypto/rand"

    "crypto/rsa"

    "crypto/x509"

    "encoding/pem"

    "os"

)


func create() {


    //

    // Create key

    //

    reader := rand.Reader

    bitSize := 2048


    key, err := rsa.GenerateKey(reader, bitSize)

    if err != nil {

        panic(err)

    }


    publicKeyAsc1Bytes, err := x509.MarshalPKIXPublicKey(&(key.PublicKey))

    if err != nil {

        panic(err)

    }


    publicPemKey := &pem.Block{

        Type:  "PUBLIC KEY",

        Bytes: publicKeyAsc1Bytes,

    }


    privatePemKey := &pem.Block{

        Type:  "RSA PRIVATE KEY",

        Bytes: x509.MarshalPKCS1PrivateKey(key),

    }


    //

    // Create Device with publicPemKey

    //


    :


    //

    // Save pem files

    //


    publicPemFile, err := os.Create(PATH_TO_PUBLICKEY)

    if err != nil {

        panic(err)

    }

    defer publicPemFile.Close()


    err = pem.Encode(publicPemFile, publicPemKey)

    if err != nil {

        panic(err)

    }


    privatePemFile, err := os.Create(PATH_TO_PRIVATEKEY)

    if err != nil {

        panic(err)

    }

    defer privatePemFile.Close()


    err = pem.Encode(privatePemFile, privatePemKey)

    if err != nil {

        panic(err)

    }


}



查看完整回答
反對 回復 2023-06-26
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

編碼頭和編碼方法不匹配。如果你想使用

asn1Bytes := x509.MarshalPKCS1PublicKey(&key.PublicKey)

那么pem.Block類型應該是Type:  "RSA PUBLIC KEY",.

如果您想要其他常見的公鑰格式(SubjectPublicKeyInfo ASN.1 結構),請保留pem.Block現有的格式,而使用

asn1Bytes, err := x509.MarshalPKIXPublicKey(&key.PublicKey)

我不知道 GCP 的期望是什么,但幾乎可以肯定是其中之一。


查看完整回答
反對 回復 2023-06-26
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

這是預期的密鑰格式與密鑰類型 RSA_PEM 與 RSA_X509_PEM 之間不匹配。切換解決了這個問題。



查看完整回答
反對 回復 2023-06-26
  • 4 回答
  • 0 關注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號