2

Comment puis-je charger des certificats clients à partir d'un magasin personnel à l'aide d'ASP.NET?Comment puis-je charger des certificats clients à partir d'un magasin personnel à l'aide d'ASP.NET?

Si c'est possible, puis-je crypter des données avec lui?

Pour cela j'ai créé une application dans ASP.NET 2.0 qui récupère tous les certificats installés dans le magasin de certificats client (personal) pour créer avec lui une signature numérique.

mais cela ne fonctionne pas, et je ne sais pas quel est le problème

// ... 
using System.Security.Cryptography.X509Certificates; 

namespace WebApplication4 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     public static string ToHexString(byte[] bytes) 
     { 
      // ... 
     } 

     protected void btnSignature_Click(object sender, EventArgs e) 
     { 
      X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser); 
      store.Open(OpenFlags.OpenExistingOnly); 
      X509Certificate2Collection certificates = store.Certificates; 

      int a = certificates.Count; 

      lbCertCount.Text = System.Convert.ToString(a); 

      if (a > 0) 
      { 
       X509Certificate2 certificate = certificates[1]; 

       string publicKey = certificate.GetPublicKeyString(); 
       lbMypublicKey.Text = publicKey + "<br/>"; 

       // AsymmetricAlgorithm privateKey = certificate.PrivateKey; 

       RSACryptoServiceProvider privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 

       // test message 
       byte[] buffer = Encoding.Default.GetBytes("Welcome"); 
       byte[] signature = privateKey.SignData(buffer, new SHA1Managed()); 
       string me = ToHexString(signature); 

       lbSignature.Text = me; 


       RSACryptoServiceProvider publicKey1 = certificate.PublicKey.Key as RSACryptoServiceProvider; 

       bool verify = publicKey1.VerifyData(buffer, new SHA1Managed(), signature); 

       if (verify == true) 
       { 
        lbControl.Text = "Signature valid"; 
       } 
       else 
       { 
        lbControl.Text = "Signature not Valid"; 
       } 
      } 
     } 
    } 
} 
+0

Essayez-vous de charger le certificat visiteurs ou un certificat pour un compte d'utilisateur sur le serveur? –

+0

Je tente de charger le certificat des visiteurs, NB: tous mes visiteurs sont dans le réseau intranet et tous sont connectés sur le répertoire actif –

+0

Ok. Comment authentifiez-vous vos utilisateurs? Sont-ils usurpés? –

Répondre

0

Je devine que vous avez frappé cette application ASP.NET. comme un harnais de test et il n'est pas réellement votre intention d'écrire une application de production qui accède au certificat personnel. stocker sur un serveur web? Je n'ai pas du tout étudié ou testé votre code, mais je vérifierais les privilèges de sécurité en premier lieu. Je suppose que le compte sous lequel le processus de travail ASP.Net s'exécute n'a pas accès au certificat personnel. le magasin.

+0

1/vous devez savoir que j'ai besoin de charger le certificat sur le magasin client "personnel" pas sur un magasin de serveur web 2/oui à droite, ce n'est pas une version de production, je viens de tester ce code pour l'implémentation dans la vraie application 3/Quel est le compte que asp.net doit ruiner pour charger le certificat client? –

+0

Je n'ai rien fait avec le magasin de cert pendant des années, mais je crois et il semblerait logique que pour accéder à un cert dans le magasin personnel, vous auriez besoin de courir sous le compte qui a importé le cert dans ledit magasin. Je vous recommande d'exécuter votre faisceau de test dans une application de console. sous le même compte que vous avez utilisé pour importer le cert. dans le magasin. –

1

Pour tous les Googlers:

Ajouter à votre Web.Config:

<identity impersonate="true" /> 

Pour plus d'informations, voir msdn on impersonation.

Questions connexes