Get X509Certificate2
//----------------------------------------------------------------------- // <copyright file="CertificateUtil.cs" company="MICROSOFT"> // Copyright (c) MICROSOFT Technologies. All rights reserved. // </copyright> // <summary> // Class for handling security certificates // </summary> //----------------------------------------------------------------------- namespace HCLT.Practice.WindowsAzure.Solution.STSAuthentication { using System; using System.Security.Cryptography.X509Certificates; /// <summary> /// A utility class which helps to retrieve an x509 certificate /// </summary> public class CertificateUtil { /// <summary> /// Method is used to retrieve certificates /// </summary> /// <param name="name">certificate name</param> /// <param name="location">certificate location</param> /// <param name="subjectName">certificate subject name</param> /// <returns>valid certificate</returns> public static X509Certificate2 GetCertificate(StoreName name, StoreLocation location, string subjectName) { X509Store store = new X509Store(name, location); X509Certificate2Collection certificates = null; store.Open(OpenFlags.ReadOnly); try { X509Certificate2 result = null; // Every time we call store.Certificates property, a new collection will be returned. certificates = store.Certificates; for (int i = 0; i < certificates.Count; i++) { X509Certificate2 cert = certificates[i]; if (cert.SubjectName.Name.ToLower() == subjectName.ToLower()) { if (result != null) { throw new ApplicationException(string.Format("There are multiple certificates for subject Name {0}", subjectName)); } result = new X509Certificate2(cert); } } if (result == null) { throw new ApplicationException(string.Format("No certificate was found for subject Name {0}", subjectName)); } return result; } finally { if (certificates != null) { for (int i = 0; i < certificates.Count; i++) { X509Certificate2 cert = certificates[i]; cert.Reset(); } } store.Close(); } } } }
1. | ClientCertificates | ||
2. | Gets a certificate from a given store. |