public static X509Certificate GetCertificateFromStore(StoreName storeName, StoreLocation storeLocation, CertificateInfo certificateInfo) { X509Store store = new X509Store(storeName, storeLocation); store.Open(OpenFlags.ReadOnly); X509Certificate2Collection collection = store.Certificates; foreach (KeyValuePair <X509FindType, string> search in certificateInfo.Searches.Where(s => !string.IsNullOrWhiteSpace(s.Value))) { collection = collection.Find(search.Key, search.Value, true); } X509Certificate[] certificates = collection.OfType <X509Certificate>().ToArray(); if (certificates.Length > 1) { throw new MultipleCertificatesException(certificateInfo, certificates); } if (certificates.Length == 0) { throw new CertificateNotFoundException(certificateInfo); } X509Certificate certificate = certificates.First(); return(certificate); }
public MultipleCertificatesException(CertificateInfo certificateInfo, X509Certificate[] certificates) : base(string.Format("Multiple certificates were found with the supplied CertificateInfo parameters:\r\n{0}\r\nCertificates:\r\n{1}", GetCertificateInfo(certificateInfo), GetCertificateSubjects(certificates))) { Certificates = certificates; CertificateInfo = certificateInfo; }