using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography.X509Certificates; namespace Hcs.GostXades.Helpers { public static class CertificateHelper { /// /// Получение сертификата из личного локального хранилища по отпечатку /// /// Отпечаток требуемого сертификата /// Сертификат с нужным отпечатком public static X509Certificate2 GetCertificateByThumbprint(string thumbprint) { var certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); try { certificateStore.Open(OpenFlags.ReadOnly); var certificateCollection = certificateStore.Certificates .Cast() .Where(i => string.Equals(i.Thumbprint, thumbprint, StringComparison.InvariantCultureIgnoreCase)) .ToArray(); if (!certificateCollection.Any()) { throw new ArgumentException("Некорректный отпечаток сертификата"); } var activeCertificates = certificateCollection.Where(i => DateTime.Parse(i.GetEffectiveDateString()) <= DateTime.Now && DateTime.Now <= DateTime.Parse(i.GetExpirationDateString())) .ToArray(); if (activeCertificates.Any()) { return activeCertificates[0]; } throw new ArgumentException($"Сертификат с указанным отпечатком {thumbprint} недействителен"); } finally { certificateStore.Close(); } } /// /// Получение сертификатов из локального хранилища текущего пользователя /// /// Сертификаты из локального хранилища текущего пользователя public static IEnumerable GetCertificates() { var certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser); try { certificateStore.Open(OpenFlags.ReadOnly); return certificateStore.Certificates.OfType(); } finally { certificateStore.Close(); } } } }