Go TLS x509:即使使用 pkcs8,块中也没有 DEK-Info 标头

已经花了很多时间弄清楚为什么我无法使用

获得证书
cert,err := tls.X509KeyPair(blockCrt.Bytes,blockPEM)

我做过的一些研究历史

如果我使用“x509.DecryptPEMBlock”,我也有类似的错误

x509:块中没有 DEK-Info 标头

因此,我对其进行了更改并使用了以下代码以及 x509.DecrpypEMBlock 和 https://github.com/youmark/pkcs8

package main

import (
    "crypto/tls"
    "crypto/x509"
    "encoding/pem"
    "errors"
    "fmt"
)

func main() {

    New()

}

func New() error {
    certPem := []byte(`
-----BEGIN CERTIFICATE-----

... -----结束证书----- `)

    keyPem := []byte(`
-----BEGIN ENCRYPTED PRIVATE KEY-----

... -----结束加密私钥----- `)

    // DECODE CRT PEM block
    blockCrt,_ := pem.Decode([]byte(certPem))

    // DECODE KEY PEM block
    blockKey,_ := pem.Decode([]byte(keyPem))

    // CHECK ENCRYPTION ON CRT/KEY PEM block
    isKeyEncryptedPem := x509.IsEncryptedPEMBlock(blockKey)
    isCrtyEncryptedPem := x509.IsEncryptedPEMBlock(blockCrt)

    if blockKey == nil || blockCrt == nil {
        fmt.Println("Error: Failed to decode PEM block")
        return errors.New("Error: Failed to decode PEM block")
    }

    // DECRYPT KEY PEM BLOCK WITH PAsspHRASE

    // Using private key
    // decryptpkcs8,err := pkcs8.Parsepkcs8PrivateKey(blockKey.Bytes,[]byte(Passphrase))
    // blockpkcs8,err := x509.Marshalpkcs8PrivateKey(decryptpkcs8)

    // keyPEM := pem.EncodeToMemory(blockpkcs8)

    // Using rsa
    // decryptpkcs8,err := pkcs8.Parsepkcs8PrivateKeyRSA(blockKey.Bytes,[]byte(Passphrase))
    // blockPEM := x509.Marshalpkcs1PrivateKey(decryptpkcs8)

    // blockPEM,err := x509.DecryptPEMBlock(keyPEM,[]byte(Passphrase))
    blockPEM,err := x509.DecryptPEMBlock(blockKey,[]byte("password"))

    // decrypedPemBlock,err := x509.DecryptPEMBlock(decryptpkcs8,[]byte(Passphrase))
    // derFmt,err := pkcs8.MarshalPrivateKey(decryptpkcs8,[]byte(Passphrase))

    // fmt.Println("=== decryptpkcs8:",decryptpkcs8)
    fmt.Println("=== isKeyEncryptedPem: ",isKeyEncryptedPem)
    fmt.Println("=== isCrtyEncryptedPem: ",isCrtyEncryptedPem)
    fmt.Println("=== blockCrt: ",blockCrt)
    fmt.Println("=== blockKey: ",blockKey)
    fmt.Println("=== blockPEM: ",blockPEM)

    if err != nil {
        fmt.Println("Error: Decrypt Key Error - ",err)
        return err
    }

    // cert,err := tls.X509KeyPair(certPem,decrypedPemBlock)
    // cert,decrypedPemBlock)
    cert,blockPEM)
    // cert,keyPEM)
    // cert,blockKey.Bytes)

    fmt.Println("=== cert: ",cert)

    if err != nil {
        fmt.Println("Error: ",err)
        return err
    }

    return nil
}

然而,我仍然不断地碰壁,想问有人知道我是否遗漏了什么吗?

lilyweiwei 回答:Go TLS x509:即使使用 pkcs8,块中也没有 DEK-Info 标头

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/991487.html

大家都在问