[英]How to extract the Email from a X509 Certificate in .NET?
我正在寻找从X509证书获取电子邮件(字符串)的方法。 我找不到准备好的财产或方法。 因此,对我来说最好(对于未来任务最灵活)是通过ASN OID(1.2.840.113549.1.9.1)获取值。 如何使用本机.NET类执行此操作?
我试图使用AsnEncodedData.format
但没有任何影响。 有没有办法做到这一点?
如果可以使用第三方工具,那么您可以查看我的Powershell PKI模块。 该模块包含一个PKI.Core.dll库,它是一组API。 API文档中有相当详细的API 文档
使用这个库我会使用以下静态方法和自定义类:
using PKI.ASN;
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace MyNamespace {
public class RdnAttribute {
public Oid OID { get; set; }
public String Value { get; set; }
}
public class MyClass {
public static List<RdnAttribute> GetRdnAttributes(X500DistinguishedName name) {
List<RdnAttribute> retValue = new List<RdnAttribute>();
ASN1 asn = new ASN1(name.RawData);
asn.MoveNext();
do {
ASN1 asn2 = new ASN1(asn.Payload);
asn2.MoveNext();
List<Byte> oidRawData = new List<Byte>(asn2.Header);
oidRawData.AddRange(asn2.Payload);
Oid oid = ASN1.DecodeObjectIdentifier(oidRawData.ToArray());
asn2.MoveNext();
String value;
switch (asn2.Tag) {
case (Byte)ASN1Tags.UniversalString:
value = Encoding.UTF32.GetString(asn2.Payload);
break;
case (Byte)ASN1Tags.BMPString:
value = Encoding.BigEndianUnicode.GetString(asn2.Payload);
break;
default:
value = Encoding.UTF8.GetString(asn2.Payload);
break;
}
retValue.Add(new RdnAttribute { OID = oid, Value = value });
} while (asn.MoveNextCurrentLevel());
return retValue;
}
}
}
该方法返回RDN属性的数组(无序),其中OID
属性包含RDN对象标识符, Value
属性包含RDN文本值。 如果你可以使用Linq,那么你可以快速搜索集合: somearray.Where(x => x.OID.Value == "1.2.840.113549.1.9.1");
。 请注意,特定的RDN属性可能会出现多次,因此您不应使用First*
或Single*
Linq方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.