从证书中读取RFC822字段

时间:2013-06-28 09:27:14

标签: c# x509certificate

我有这个证书:

Windows Certificate

我需要阅读字段“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数据吗?

由于

1 个答案:

答案 0 :(得分:1)

您可以通过

获取主题备用名称扩展名的字节
byte[] subjAltName = cert.Extensions["2.5.29.17"].RawData 

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