问题描述
已经花了很多时间弄清楚为什么我无法使用
获得证书cert,err := tls.X509KeyPair(blockCrt.Bytes,blockPEM)
我做过的一些研究历史
- 能够阅读Understanding PKCS1,PKCS8 and PEM
- 类似问题"No DEK-Info header in block" when attempting to read encrypted private key
如果我使用“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
}
然而,我仍然不断地碰壁,想问有人知道我是否遗漏了什么吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)