x509.Certificate Desierialize Error
调用json.Marshal
将以下old code序列化后,在调用json.Unmarshan
反序列化后,会出现各种解析出错的诡异问题。
最省力的方式时保存证书的pem,动态解析pem。
- Old Code
type Message struct {
CertPEM x509.Certficate `json:"cert"`
Msg []byte `json:"msg"`
}
- New Code
type Message struct {
CertPEM string `json:"cert"`
Msg []byte `json:"msg"`
}
golang解析证书pem的一般方式
- Parse Cert.pem
block, _ := pem.Decode([]byte(certPem))
if block == nil {
log.Println("failed to parse certificate PEM")
}
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
log.Println("failed to parse certificate: " + err.Error())
}
读取PEM文件
func readCert(path string) []byte {
fi, err := os.Open(path)
if err != nil {
panic(err)
}
defer fi.Close()
chunks, err := ioutil.ReadAll(fi)
//fi, err := os.Open("./certfile/cert.pem")
//if err != nil {
// panic(err)
//}
//defer fi.Close()
//r := bufio.NewReader(fi)
//
//chunks := make([]byte, 0, 1024)
//
//buf := make([]byte, 1024)
//for {
// n, err := r.Read(buf)
// if err != nil && err != io.EOF {
// panic(err)
// }
// if 0 == n {
// break
// }
// chunks = append(chunks, buf[:n]...)
//}
return chunks
}
有疑问加站长微信联系(非本文作者)