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();
}
}
}
}
Related examples in the same category