gpt4 book ai didi

c# - 如何从 .NET 中的 X509 证书中提取电子邮件?

转载 作者:行者123 更新时间:2023-11-30 17:45:51 24 4
gpt4 key购买 nike

我正在寻找从 X509 证书获取电子邮件(字符串)的方法。我找不到现成的属性或方法。所以对我来说最好的(对 future 的任务最灵活)是通过 ASN OID (1.2.840.113549.1.9.1) 获取值。如何使用 native .NET 类执行此操作?

我尝试使用 AsnEncodedData.format 但没有任何效果。有没有办法做到这一点?

最佳答案

如果用3rd party工具没问题的话可以看看我的Powershell PKI模块。该模块包含一个 PKI.Core.dll 库,它是一组 API。 API 在 Library documentation 中有很好的记录

对于这个库,我会使用以下静态方法和自定义类:

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 方法。

关于c# - 如何从 .NET 中的 X509 证书中提取电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27064336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com