2010-10-18 4 views
3

J'ai le code .Net suivant (asp.net) pour signer en utilisant un certificat client."Impossible de trouver le certificat et la clé privée pour le déchiffrement" pour le certificat pfx pkcs # 12 avec la clé privée

J'ai un certificat client stocké sous l'ordinateur local et non l'utilisateur actuel.

Le certificat client est PFX PKCS # 12 et a la clé privée

clé privée importés ne sont pas marqués comme exportables. Ma clé privée dans le certificat client protégé par un mot de passe.

Sur la dernière ligne ci-dessus, j'obtiens l'erreur "Impossible de trouver le certificat et la clé privée pour le décryptage".

Il semble que la clé privée n'est pas accessible lors de l'utilisation de mon code.

Y a-t-il un moyen pour moi d'associer la clé privée à mon certificat client? Aucune suggestion ?

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; 
} 

} 

EDIT: Problèmes d'identité dans AppPool. L'utilisateur qui installe le certificat dans LocalMachine Store doit être l'identité de AppPool of WebSite et se trouve dans le groupe IIS_WPG.

SOLUTION: Créer un utilisateur dans un domaine, l'ajouter au groupe IIS_WPG, l'ajouter comme Identity AppPool. Installez les certificats dans l'ordinateur local de stockage en utilisant cet utilisateur créé.

+0

Problèmes d'identité dans AppPool. L'utilisateur qui installe le certificat dans LocalMachine Store doit être l'identité de AppPool of WebSite et se trouve dans le groupe IIS_WPG. – Kiquenet

Répondre

2

SOLUTION: Créer un utilisateur dans un domaine, l'ajouter dans le groupe IIS_WPG, l'ajouter comme Identity AppPool. Installez les certificats dans l'ordinateur local de stockage en utilisant cet utilisateur créé.

Questions connexes