Search code examples
.netcertificatex509certificate2

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


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

        foreach (X509Extension ext in certificate.Extensions)
        {
            if (ext.Oid.Value.Equals(/* SAN OID */"2.5.29.17"))
            {
                byte[] raw = ext.RawData;
                // ?????? parse to get type and name ????????
            }
        }

Solution

  • Use the Format method of the extension for a printable version.

    X509Certificate2 cert = /* your code here */;
    
    foreach (X509Extension extension in cert.Extensions)
    {
        // Create an AsnEncodedData object using the extensions information.
        AsnEncodedData asndata = new AsnEncodedData(extension.Oid, extension.RawData);
        Console.WriteLine("Extension type: {0}", extension.Oid.FriendlyName);
        Console.WriteLine("Oid value: {0}",asndata.Oid.Value);
        Console.WriteLine("Raw data length: {0} {1}", asndata.RawData.Length, Environment.NewLine);
        Console.WriteLine(asndata.Format(true));
    }