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;
        }
示例#2
0
        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);
 }