protected static string GetCertificateInfo(CertificateInfo certificateInfo) { string result = string.Empty; PropertyInfo[] propertyInfos = typeof (CertificateInfo).GetProperties(); foreach (PropertyInfo info in propertyInfos) { object value = info.GetValue(certificateInfo, null); string reportedValue = value == null ? "null" : string.Format("\"{0}\"", value); result += string.Format("\t{0}: {1}\r\n", info.Name,reportedValue); } return result; }
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; }
public override void Run() { CertificateInfo certificateInfo = new CertificateInfo {IssuerName = IssuerName,SerialNumber = SerialNumber,KeyUsage = KeyUsage,SubjectName = SubjectName,ThumbPrint = ThumbPrint}; Certificates.GetCertificateFromStore(CertificateStoreName, CertificateStoreLocation, certificateInfo); }