Пример #1
0
        public X509Certificate2 GetPrivateCertificate(string thumbprint)
        {
            var certificate = GetPublicCertificate(thumbprint);

            if (certificate?.HasPrivateKey == false)
            {
                throw new SecureStoreException(
                          SecureStoreException.Type.InvalidConfiguration,
                          SecureStoresUtil.GetLocalizedResource(nameof(Resource.SecureStoreCert)));
            }

            return(certificate);
        }
Пример #2
0
        public X509Certificate2 GetPublicCertificate(string thumbprint)
        {
            if (string.IsNullOrWhiteSpace(thumbprint))
            {
                return(null);
            }

            var certCollection = GetCertificateCollection(thumbprint);

            if (certCollection.Count != 1)
            {
                throw new SecureStoreException(
                          SecureStoreException.Type.InvalidConfiguration,
                          SecureStoresUtil.GetLocalizedResource(nameof(Resource.SecureStoreCert)));
            }

            return(certCollection[0]);
        }
Пример #3
0
        private X509Certificate2Collection GetCertificateCollection(string thumbprint)
        {
            Exception normalizationException = null;

            var certCollection = new X509Certificate2Collection();

            try
            {
                using (X509Store localMachineStore = new X509Store(StoreName.My, StoreLocation.LocalMachine))
                {
                    localMachineStore.Open(OpenFlags.ReadOnly);
                    //`validOnly` arg is set to false so it can work with self-signed without CA certs
                    certCollection = localMachineStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
                    localMachineStore.Close();
                }
                if (certCollection.Count == 0)
                {
                    using (X509Store currentUserStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
                    {
                        currentUserStore.Open(OpenFlags.ReadOnly);
                        //`validOnly` arg is set to false so it can work with self-signed without CA certs
                        certCollection = currentUserStore.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
                        currentUserStore.Close();
                    }
                }
                return(certCollection);
            }
            catch (Exception ex)
            {
                normalizationException = ex;
            }

            throw new SecureStoreException(
                      SecureStoreException.Type.InvalidConfiguration,
                      SecureStoresUtil.GetLocalizedResource(nameof(Resource.SecureStoreCert)),
                      normalizationException);
        }