CNG хранит сертификат, подписывая хеш с помощью c # против csp - PullRequest
0 голосов
/ 23 сентября 2019

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

Вот что раньше работало с CSP:

     CspParameters csp = new CspParameters(1, m_TokenCSPName);

     csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
     csp.KeyContainerName = m_CertContainer;
     csp.KeyNumber = (int)KeyNumber.Exchange;
     csp.KeyPassword = spw;

     RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider(csp);

Используя этот объект rsa1, я могу подписать хеш.

Глядя на некоторые другие публикации здесь, я обнаружил, что могу получить закрытый ключ из хранимого сертификата CNG следующим образом - и я могу подписать хэш, используя этот код:

Ключ здесь - это

rsa2.ImportParameters(privatekeyA.ExportParameters(true));

, что, как я обнаружил, необходимо при использовании хранимого сертификата CNG.

сертификат - это объект сертификата x509

RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider();

var privatekeyA = certificate.GetRSAPrivateKey();

rsa2.ImportParameters(privatekeyA.ExportParameters(true));


string SignatureString = "Data that is to be signed";
byte[] plainTextBytes = Encoding.ASCII.GetBytes(SignatureString);
bool Verified = false;
using (SHA1CryptoServiceProvider shaM = new SHA1CryptoServiceProvider())
{
// hash the data to be signed - you can use signData and avoid the hashing if you like

byte[] hash = shaM.ComputeHash(plainTextBytes);
// sign the hash
byte[] digitalSignature = rsa2.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));

и т. Д., И это работает.Но так как я не могу использовать csp - я не могу передать пароль в коде.Он прекрасно шифруется, но выдает запрос на ввод пароля.

Вопрос в том, как использовать этот хранимый сертификат CNG для подписи хэша и передачи пароля?

...