我正在尝试几个小时来访问X509 Certficates的扩展字段。我正在为OpenSSL使用.net Wrapper类。
这是我访问数据的方式:
byte[] data = MySSLCertificate.Extensions[0].Data
我尝试将其转换为ASCII编码字符串,但我不断得到奇怪的符号:
"0p?!test@hsm..."
绝对:
"email:test@hsm..."
任何人都知道如何解决这个问题?
答案 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.1和decode things yourself。这需要你付出相当大的努力,但你将在这个过程中获得一些相当的知识。