在OpenSSL中访问X509证书扩展字段

时间:2013-08-09 08:46:40

标签: .net openssl certificate

我正在尝试几个小时来访问X509 Certficates的扩展字段。我正在为OpenSSL使用.net Wrapper类。

这是我访问数据的方式:

byte[] data = MySSLCertificate.Extensions[0].Data

我尝试将其转换为ASCII编码字符串,但我不断得到奇怪的符号:

"0p?!test@hsm..."

绝对:

"email:test@hsm..."

任何人都知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您需要了解ASN.1,X.509和相关数据对象,包括以这种方式编码的扩展。可以把它想象成用于数据交换的“二进制XML”编码。

您可以直接使用OpenSSL查看(大多数)证书的ASN.1结构:

openssl asn1parse -in mycert.pem -inform PEM

dumpasn1更好(需要DER输入)

openssl x509 -in mycert.pem -inform PEM -out mycert.der -outform DER
dumpasn1 -adilt mycert.der

扩展将在RSA数据之后显示为一组SEQUENCE。另请参阅我对此问题的回答:ASN.1 Octet Strings

答案 1 :(得分:0)

如果您正在使用OpenSSL.NET包装器类,那么我猜测您是在.NET中开发的。然后,您可以使用所有标准.NET类,包括System.Security.Cryptography.X509Certificates.X509Certificate及其更新版本System.Security.Cryptography.X509Certificates.X509Certificate2,它将很高兴地解码您的证书并让您探索他们的extensions

X.509解析很复杂,因为每个扩展都是具有自己规则的结构。 OpenSSL(C库)包含一些代码来处理某些扩展(不是所有扩展),但不清楚OpenSSL的.NET包装是否提供对这些函数的访问。无论如何,OpenSSL.NET的目的是让你在不使用私钥的Windows / .NET框架的情况下运行加密算法(因为它有时会很麻烦);但是,证书只包含公钥,这些由.NET类处理得很好。

您还可以了解ASN.1decode things yourself。这需要你付出相当大的努力,但你将在这个过程中获得一些相当的知识。