You can actually access the certificate store that is installed on windows.
The following code first shows a list of installed certificates and then shows the information of a particular one.
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
namespace ListadoCertificadosLocales
{
class Program
{
static void Main(string[] args)
{
MostrarListadoCertificados();
Console.WriteLine("----------------------");
MostrarInfoCertificado("Root", StoreLocation.CurrentUser);
Console.ReadKey();
}
/// <summary>
/// Fuente: https://msdn.microsoft.com/es-es/library/system.security.cryptography.x509certificates.x509store(v=vs.110).aspx
/// </summary>
private static void MostrarListadoCertificados()
{
Console.WriteLine("\r\nExists Certs Name and Location");
Console.WriteLine("------ ----- -------------------------");
foreach (StoreLocation storeLocation in (StoreLocation[])
Enum.GetValues(typeof(StoreLocation)))
{
foreach (StoreName storeName in (StoreName[])
Enum.GetValues(typeof(StoreName)))
{
X509Store store = new X509Store(storeName, storeLocation);
try
{
store.Open(OpenFlags.OpenExistingOnly);
Console.WriteLine("Yes {0,4} {1}, {2}",
store.Certificates.Count, store.Name, store.Location);
}
catch (CryptographicException)
{
Console.WriteLine("No {0}, {1}",
store.Name, store.Location);
}
}
Console.WriteLine();
}
}
/// <summary>
/// Muestra por consola la informacion para un almacen
/// </summary>
/// <param name="nombreAlmacen">Nombre del almacen que se quiere acceder</param>
/// <param name="ubicacion">Especifica la ubicación del almacén de certificados X.509.</param>
private static void MostrarInfoCertificado(string nombreAlmacen, StoreLocation ubicacion)
{
try
{
X509Store almacen = new X509Store(nombreAlmacen, ubicacion);
almacen.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection storecollection = (X509Certificate2Collection)almacen.Certificates;
Console.WriteLine("Nombre almacen: {0}", almacen.Name);
Console.WriteLine("Ubicacion almacen: {0}", almacen.Location);
foreach (X509Certificate2 x509 in storecollection)
{
Console.WriteLine("Nombre certificado: {0}", x509.Subject);
}
}
catch (CryptographicException cryexc)
{
Console.WriteLine("Error: MostrarInfoCertificado:{0}", cryexc.Message);
}
}
}
}