对于带有私钥的证书pfx pkcs#12,“无法找到用于解密的证书和私钥”

时间:2010-10-18 07:39:44

标签: .net encryption x509certificate private-key

我有以下.Net代码(asp.net)用于使用客户端证书进行签名。

我的客户端证书存储在本地计算机下,而不是当前用户。

客户端证书是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中安装证书的用户必须是WebSite的AppPool的身份,并且位于IIS_WPG组中。

解决方案:在域中创建用户,将其添加到IIS_WPG组中,将其添加为Identity AppPool。使用创建的用户在Store Local Computer中安装证书。

1 个答案:

答案 0 :(得分:2)

解决方案:在域中创建用户,将其添加到IIS_WPG组中,将其添加为Identity AppPool。使用创建的用户在Store Local Computer中安装证书。