0

我有这个证书:

Windows 证书

我需要阅读字段“RFC822”。我使用 X509Certificate2 类,但此类不返回此信息:

StringBuilder sb = new StringBuilder();
X509Certificate2 card = GetCertificate();                    

sb.AppendLine(card.FriendlyName);
sb.AppendLine(card.GetCertHashString());
sb.AppendLine(card.GetEffectiveDateString());
sb.AppendLine(card.GetExpirationDateString());
sb.AppendLine(card.GetExpirationDateString());
sb.AppendLine(card.GetFormat());
//sb.AppendLine(card.GetIssuerName());
sb.AppendLine(card.GetKeyAlgorithm());
sb.AppendLine(card.GetKeyAlgorithmParametersString());
//sb.AppendLine(card.GetName());
sb.AppendLine(card.GetPublicKeyString());
sb.AppendLine(card.GetRawCertDataString());
sb.AppendLine(card.GetSerialNumberString());
sb.AppendLine(card.HasPrivateKey.ToString());
sb.AppendLine(card.Issuer);
sb.AppendLine(card.IssuerName.Name);
sb.AppendLine(card.SerialNumber);
sb.AppendLine(card.Subject);
sb.AppendLine(card.SubjectName.Name);
sb.AppendLine(card.Thumbprint);
sb.AppendLine(card.Version.ToString());

我可以从 .NET 程序中读取 RFC822 数据吗?

谢谢

4

1 回答 1

2

您可以通过以下方式获取主题备用名称扩展的字节

byte[] subjAltName = cert.Extensions["2.5.29.17"].RawData 

如果您查看这些字节,System.Text.Encoding.UTF8.GetString(subjAltName)您将看到电子邮件地址。但是这个字节数组实际上代表了一个ASN.1序列结构,需要正确解码。正如 Eugene 所说,如果您需要证书中的一些深入信息,使用封装复杂 ASN.1 内容的第三方库可能会更容易。

于 2013-06-28T11:56:28.540 回答