X509Сертификат сертификата Exceprion - PullRequest
0 голосов
/ 07 февраля 2020

Я получил цифровой сертификат от сертифицированного органа, с ним я получил наклейку USB с закрытым ключом. В VisualStudio я делаю консольное приложение, я хочу протестировать шифрование и дешифрование с этим сертификатом. Для этого я использовал уже хорошо известный код:

private static string EncryptRSA(string input)
        {
            string outputMessage = String.Empty;
            X509Certificate2 cert = GetCertificateFromStore("I find sertificate by Serial number");
            using (RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PublicKey.Key)
            {
                byte[] byteData = Encoding.UTF8.GetBytes(input);
                byte[] byteEncrypted = csp.Encrypt(byteData, false);
                outputMessage = Convert.ToBase64String(byteEncrypted);
            }

            return izlaznaPoruka;
        }

        public static string DecryptRsa(string enkriptovan)
        {
            string text = string.Empty;
            X509Certificate2 cert = GetCertificateFromStore("I find sertificate by Serial number");

            using (RSACryptoServiceProvider csp = (RSACryptoServiceProvider) cert.PrivateKey)
            {
                byte[] byteEncrypted = Convert.FromBase64String(enkriptovan);
                byte[] byteDecrypted = csp.Decrypt(byteEncrypted, false);
                text = Encoding.UTF8.GetString(byteDecrypted);
            }

            return text;
        }

До этого момента все идет как надо, в методе DecryptRsa:

byte[] byteDecrypted = csp.Decrypt(byteEncrypted, false);

На этом этапе моему клиенту аутентификации требуется пароль - я ввожу правильный пароль, и у меня появляется следующее исключение: необработанное исключение типа 'System.Security.Cryptography.CryptographicException' произошло в mscorlib.dll Произошла внутренняя ошибка.

Может любой Помогите мне?

Я исследовал множество решений, но большинство закрытых ключей экспортируются в файл .pfx и используют трехпараметрический конструктор X509Certificate2, когда это похоже на

X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
    X509KeyStorageFlags.MachineKeySet); 

Тогда изменить разрешение папки ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys. Я вручную изменил права на папку ..

1 Ответ

1 голос
/ 16 февраля 2020

Если ошибка в трассировке стека: «набор ключей не существует», то вам может потребоваться разрешение на закрытый ключ из «Управление личными ключами»

  1. Создать консоль управления Microsoft (MM C) с оснасткой «Сертификаты», предназначенной для хранилища сертификатов локального компьютера.
  2. Разверните MM C и выберите «Управление личными ключами»
  3. . На вкладке «Безопасность» добавьте удостоверение пула или Учетная запись пользователя IIS с доступом для чтения.

Пожалуйста, отметьте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...