«Не удается найти сертификат и закрытый ключ для расшифровки» для сертификата pfx pkcs # 12 с закрытым ключом - PullRequest
3 голосов
/ 18 октября 2010

У меня есть следующий код .Net (asp.net) для подписи с использованием сертификата клиента.

У меня есть сертификат клиента, хранящийся на локальном компьютере, а не текущий пользователь.

Сертификат клиентаis pfx pkcs # 12 и имеет закрытый ключ

Импортированный закрытый ключ НЕ помечен как экспортируемый.

мой закрытый ключ в сертификате клиента защищен паролем.

В последней строкевыше я получаю сообщение об ошибке «Не удается найти сертификат и закрытый ключ для расшифровки».

Похоже, что закрытый ключ недоступен при использовании моего кода.

Могу ли я в любом случае связать закрытый ключ с моим клиентским сертификатом?Любые предложения?

public void FirmarConCertificado(string nombreCertificado, X509Certificate2 certificate) 
{ 
    try 
    { 
 var mensaje = "Datos de prueba"; 
                System.Text.Encoding enc = System.Text.Encoding.Default; 
                byte[] data = enc.GetBytes(mensaje); 

                var contentInfo = new System.Security.Cryptography.Pkcs.ContentInfo(data); 
                var signedCms = new System.Security.Cryptography.Pkcs.SignedCms(contentInfo, true); 

                var cmsSigner = new System.Security.Cryptography.Pkcs.CmsSigner(certificate); 

                //  Sign the CMS/PKCS #7 message 
                signedCms.ComputeSignature(cmsSigner);  // <<<<<<< FAILS HERE

                //  Encode the CMS/PKCS #7 message 
               var ret = Convert.ToBase64String(signedCms.Encode()); 

 Message.Text += "Firmado con Certificado " + nombreCertificado + " encontrado en " + StoreLocation.LocalMachine; 
 } 
 catch (Exception ex) 
 { 
 Message.Text = "Error al firmar con certificado: " + ex.ToString(); 
 Message.Text += "<br /><br />InnerException: " + ex.InnerException; 
 } 

} 

РЕДАКТИРОВАТЬ: Возможно, проблемы с идентификацией в AppPool.Пользователь, устанавливающий сертификат в LocalMachine Store, должен быть удостоверением AppPool веб-сайта и находиться в группе IIS_WPG.

РЕШЕНИЕ: создать пользователя в домене, добавить его в группу IIS_WPG, добавить его как Identity AppPool.Установите сертификаты в Store Local Computer, используя этого пользователя.

1 Ответ

2 голосов
/ 29 декабря 2010

РЕШЕНИЕ: Создайте пользователя в домене, добавьте его в группу IIS_WPG, добавьте его как Identity AppPool.Установите сертификаты в Store Local Computer, используя этого созданного пользователя.

...