我现在正在尝试几个小时来访问 X509 证书的扩展字段。我正在为 OpenSSL 使用 .net Wrapper 类。
这是我可以访问数据的方式:
byte[] data = MySSLCertificate.Extensions[0].Data
我尝试将其转换为 ASCII 编码字符串,但我不断收到奇怪的符号:
"0p?!test@hsm..."
安装:
"email:test@hsm..."
有人知道我该如何解决这个问题吗?
我现在正在尝试几个小时来访问 X509 证书的扩展字段。我正在为 OpenSSL 使用 .net Wrapper 类。
这是我可以访问数据的方式:
byte[] data = MySSLCertificate.Extensions[0].Data
我尝试将其转换为 ASCII 编码字符串,但我不断收到奇怪的符号:
"0p?!test@hsm..."
安装:
"email:test@hsm..."
有人知道我该如何解决这个问题吗?
您需要了解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
如果您使用的是OpenSSL.NET包装类,那么我推测您使用 .NET 进行开发。然后,您拥有所有可用的标准 .NET 类,包括System.Security.Cryptography.X509Certificates.X509Certificate及其更新版本System.Security.Cryptography.X509Certificates.X509Certificate2,它们将愉快地解码您的证书并让您探索它们的扩展。
X.509 解析很复杂,因为每个扩展都是一个具有自己规则的结构。OpenSSL(C 库)包含一些代码来处理一些扩展(不是全部),但不清楚 OpenSSL 的 .NET 包装器是否提供对这些函数的访问。无论如何,OpenSSL.NET 的目的是让您在不使用 Windows/.NET 框架的私钥的情况下运行加密算法(因为它有时会很麻烦);但是,证书只包含公钥,这些可以由 .NET 类很好地处理。