我有一个字符串中的pem证书集合,要绑定到TLS端点,如何有效地将它们转换为CRT文件(i.e.public.crt)和密钥文件(即private.key),以便将其绑定到端点:
输入字符串:
-----BEGIN PRIVATE KEY-----
MIIE3oydueOANJHhvL3yvJdTphoev5GO7go+ByYOO/l54u5O2PxMeX+AjAb6Axmq
livIuhw=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIE3oydueOANJHhvL3yvJdTphoev5GO7go+ByYOO/l54u5O2PxMeX+AjAb6Axmq
livIuhw=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3oydueOANJHhvL3yvJdTphoev5GO7go+ByYOO/l54u5O2PxMeX+AjAb6Axmq
asdsa312asdsadasdsad=
-----END CERTIFICATE-----我要绑定的代码是:
https_r := mux.NewRouter()
err_https := http.ListenAndServeTLS(serviceEndpoint, "/etc/pki/tls/certs/public.crt", "/etc/pki/tls/certs/private.key", https_r)
if err_https != nil {
log.Fatal("Web server (HTTPS): ", err_https)
}我尝试过两种方法:
理想情况下,我不想执行一串字符串解析,这些字符串解析很容易中断。
任何其他方式都会受到高度赞赏。
发布于 2020-07-22 14:22:02
我试着把它解码到一个PEM块,但是它只读取其中一个证书,然后删除其余的证书。
诀窍是处理其余的PEM块。它以pem.Decode秒结果为单位返回。以下是如何做到这一点:
for block, rest := pem.Decode(data); block != nil; block, rest = pem.Decode(rest) {
switch block.Type {
case "CERTIFICATE":
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
panic(err)
}
// Handle certificate
fmt.Printf("%T %#v\n", cert, cert)
case "PRIVATE KEY":
key, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
panic(err)
}
// Handle private key
fmt.Printf("%T %#v\n", key, key)
default:
panic("unknown block type")
}
}https://stackoverflow.com/questions/62965006
复制相似问题