我有一个证书,需要在Go语言中解析和验证,但是解析失败,出现x509.ParseCertificate
错误,这里是a playground snippet。
我在围棋中发现了这两个问题,它们似乎是相关的:
事实证明,x509证书必须在Algorithm Identifier部分指定一个命名曲线,而这正是解析失败的地方。
我检查了证书,确实,它指定了显式曲线参数,而不是命名的curve.Pastebin link with ASN.1 description。
OpenSSL使用openssl x509 -noout -text -in
解析此证书似乎没有问题,因此从这个意义上说,证书似乎是有效的。
我试着用spacemonkeygo/openssl包解析证书,它成功了,但是看起来我不能很容易地在Go语言的标准x509
包中使用这个包中的Certificate
。
有没有快速解决这个问题的方法,而不必使用OpenSSL或派生Go的x509?
请注意,我在操场和ASN.1解码中使用了一个示例证书,但我没有生成需要解析的原始证书,并且不能要求颁发者做不同的事情。
1条答案
按热度按时间ftf50wuq1#
我看了一下go x509的源代码,它看起来明显像是手工剪切的代码,而不是各种证书标准使用的任何asn 1模式文件中机器生成的代码。
不幸的是,这意味着在github之外的Go语言中,将旧的标准改造成Go语言的x509实现将是一项公平的工作。
另一种方法是获得你想要的x509风格的asn.1模式(我 * 假设 * 它们存在!),并使用Objective System的ASN1C(需要花钱),它可以输出Go语言的源代码,这样的话,获得一个解析器来解析你想要的任何模式定义的证书格式(或者任何编码的任何其他ASN 1 PDU)就变得很容易了。
我认为不幸的一件事是,谷歌的官方序列化器是GPB,尽管它很好(如果有限的话),这意味着他们不太专注于为其他预先存在的序列化器(如ASN 1)用谷歌语言实现好的工具。