golang之x509解析及序列化

金果儿 · · 1482 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:金果儿

查看原文:golang之x509解析及序列化

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1482 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传