public override IResult Execute(IResult previousResults) { X509Store store = null; try { store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); foreach (var certificate in store.Certificates) { var authorityKey = CertificateUtilities.GetAuthorityKeyFromCertificate(certificate); if (!AuthorityKey.Equals(authorityKey, StringComparison.InvariantCultureIgnoreCase)) continue; var email = certificate.GetNameInfo(X509NameType.EmailName, false); if (string.IsNullOrWhiteSpace(email)) continue; if (!email.Equals(EmailAddress, StringComparison.InvariantCulture)) continue; var wrapper = new CertificateDataWrapper { Certificate = certificate }; SettingsManager.SetTemporaryObject(CertificateWrapperKey, wrapper); break; } return new NextResult(); } catch (Exception e) { return new ExceptionOccurred(e); } finally { if (store != null) { store.Close(); } } }
public override IResult Execute(IResult previousResults) { try { var request = EndpointManager.GetContract<AbstractGetCertificateContract>( EndPointFunctions.GetCertificate); request.LoginId = SettingsManager.GetTemporarySettingString(UsernameKey); request.Credential1 = SettingsManager.GetTemporarySettingString(PassphraseKey); request.Credential2 = SettingsManager.GetTemporarySettingString(Credential2Key); request.Credential3 = SettingsManager.GetTemporarySettingString(Credential3Key); request.Credential4 = SettingsManager.GetTemporarySettingString(Credential4Key); request.Provider = CertificateProvider; request.EncryptCertificate = EncryptCertificate ? "Yes" : "No"; Timeout = Timeout; var result = request.MakeRequest<CertificateWrapper>(); if (result == null) return request.GetErrorResult(); var bytes = Convert.FromBase64String(result.Pkcs12); var password = SettingsManager.GetSecureTemporarySettingString(PassphraseKey); X509Certificate2 certificate; if (password == null) { Log.Info("creating certificate without password"); certificate = new X509Certificate2(bytes); } else { Log.Info("creating certificate with password"); certificate = new X509Certificate2(bytes, password); } // save the text and the the actual cert var wrapper = new CertificateDataWrapper { Certificate = certificate, Bytes = bytes, Text = result.Pkcs12 }; SettingsManager.SetTemporaryObject(CertificateWrapperKey, wrapper); return new NextResult(); } catch (Exception e) { Log.Warn(e); return new ExceptionOccurred(e); } }