public static IReadOnlyList <string> GetNameInfo(this X509Certificate2 certificate, string nameTypeOid, X509NameSource nameSource) { ThrowHelpers.CheckNullOrEempty(nameof(nameTypeOid), nameTypeOid); byte[] nameBytes = nameSource switch { X509NameSource.Issuer => certificate.IssuerName.RawData, X509NameSource.Subject => certificate.SubjectName.RawData, _ => ThrowHelpers.NotSupport <byte[], X509NameSource>(nameSource) }; List <string> result = new List <string>(); AsnReader nameReader = new AsnReader(nameBytes, AsnEncodingRules.DER); AsnReader mainSequence = nameReader.ReadSequence(); while (mainSequence.HasData) { AsnReader x509Name = mainSequence.ReadSetOf().ReadSequence(); string oid = x509Name.ReadObjectIdentifierAsString(); if (string.Equals(nameTypeOid, oid, StringComparison.Ordinal)) { result.Add(x509Name.GetCharacterString(UniversalTagNumber.PrintableString)); } } return(result); } }
public static IReadOnlyList <string> GetNameInfo(this X509Certificate2 certificate, string nameTypeOid, X509NameSource nameSource) { ThrowHelpers.CheckNullOrEempty(nameof(nameTypeOid), nameTypeOid); return(GetNameInfo(certificate, nameTypeOid, nameSource == X509NameSource.Issuer)); }