1

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

这是我可以访问数据的方式:

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

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

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

安装:

"email:test@hsm..."

有人知道我该如何解决这个问题吗?

4

2 回答 2

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

于 2013-08-09T10:51:24.463 回答
0

如果您使用的是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 类很好地处理。

您也可以学习ASN.1自己解码。这需要你付出相当大的努力,但你会在这个过程中获得一些相当多的知识。

于 2013-08-09T11:33:50.070 回答