【问题标题】:Parsing a certificate string in go在 go 中解析证书字符串
【发布时间】:2016-10-17 10:20:11
【问题描述】:

我正在使用 ssldump 在通信中提取证书。当我解析结果时,我在 go 中获得了一个字符串,定义为:

var string certStr
certStr = "30 82 06 9f...."

如何将其解析为 X509 证书?

更新

我试过直接解析:

certSlc := []byte(certStr)
cert,err := x509.ParseCertificates(certSlc)

但结果是:

Error:asn1: structure error: tags don't match (16 vs {class:0 tag:19 length:48 isCompound:true}) {optional:false explicit:false application:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false}

我应该进行另一种转换吗?可能是字符串不完整或证书类型错误?

【问题讨论】:

  • 也许看看这个包:golang.org/pkg/crypto/x509希望有帮助。
  • 是的,我已经看过那个类,但是当我使用 ParseCertificates 时出现格式错误。也许问题是我无法正确地从字符串生成字节片
  • 您能提供更多详细信息吗?你是如何转换你的字符串字节切片的?您能否提供更多代码并展示您尝试/未能使用的内容?
  • @MrReboot,您可以直接将字符串转换为字节切片,实际上并没有“不正确”的方法。请使用minimal reproducible example 举例说明您遇到的问题
  • 这些例子对你有帮助吗? golang.org/src/crypto/x509/example_test.go

标签: go x509


【解决方案1】:

我发现了错误。问题出在源头上。 正如我解释的那样,我的证书字符串是“30 82 06 09 ...”。此源必须使用以下代码解码:

hex.DecodeString(certStr)

问题是十六进制解码不适用于这种格式。我得到的错误是:

encoding/hex: invalid byte: U+0020 ' '

因此,删除原始字符串中的空格和回车是使其正常工作的解决方案。

在字节片中解码后,可以毫无问题地创建 X509 证书。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多