How do you parse the Subject Alternate Names from an X509Certificate2?

前端 未结 8 1995
孤街浪徒
孤街浪徒 2020-12-18 19:40

Is there an easy way to get the Subject Alternate Names from an X509Certificate2 object?

        foreach (X509Extension ext in certificate.Extensions)
               


        
8条回答
  •  被撕碎了的回忆
    2020-12-18 20:24

    Solution to all Languages .NET
    This solution is an improvement of Minh Nguyen above solution so it can work in all Languages

    private static List GetSujectAlternativeName(X509Certificate2 cert)
            {
                var result = new List();
    
    
                var subjectAlternativeName = cert.Extensions.Cast()
                                                    .Where(n => n.Oid.Value== "2.5.29.17") //n.Oid.FriendlyName=="Subject Alternative Name")
                                                    .Select(n => new AsnEncodedData(n.Oid, n.RawData))
                                                    .Select(n => n.Format(true))
                                                    .FirstOrDefault();
    
                if (subjectAlternativeName != null)
                {
                    var alternativeNames = subjectAlternativeName.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
    
                    foreach (var alternativeName in alternativeNames)
                    {
                        var groups = Regex.Match(alternativeName, @"^(.*)=(.*)").Groups; // @"^DNS Name=(.*)").Groups;
    
                        if (groups.Count > 0 && !String.IsNullOrEmpty(groups[2].Value))
                        {
                            result.Add(groups[2].Value);
                        }
                    }
                }
    
                return result;
            }
    

提交回复
热议问题