У меня есть следующий код .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, используя этого пользователя.