2010-08-20 5 views
4

En travaillant sur une application winform et en me connectant au socket, je suis capable de créer SSLStream et de m'authentifier. en utilisant le code suivantVérifier le certificat SSL installé, côté client

// Authenticate ourself as a client. 
        this.sslStream.AuthenticateAsClient(SSL_TARGET_HOST); 

Maintenant, parfois l'application lance AuthenticationException si le certificat de l'ordinateur client n'est pas installé.

Je me demande s'il existe un moyen de vérifier qu'un certificat particulier est installé sur l'ordinateur client avant d'appeler pour se connecter?

+0

Pourquoi ne pas simplement utiliser l'exception comme indiquant que le certificat est non sécurisé? En SSL, vous ne voyez même pas le certificat du serveur jusqu'à ce que la prise de contact commence, à quel point il est trop tard pour empêcher l'exception. –

Répondre

3

Vous pouvez utiliser la classe X509Store pour déterminer les certificats installés dans un magasin de certificats particulier. Vous pouvez rechercher des certificats de différentes manières (par exemple, le nom du sujet, le nom de l'émetteur, le numéro de série, etc.).

Par exemple, pour ouvrir le magasin personnel de l'utilisateur actuel et la recherche d'un certificat par nom du sujet:

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 

try 
{ 
    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); 

    X509Certificate2Collection foundCerts = store.Certificates.Find(X509FindType.FindBySubjectName, "MY CERTIFICATE SUJECT NAME", true); 

    if (foundCerts.Count == 0) 
    { 
     // Cert not found 
    } 
    else 
    { 
     X509Certificate2 cert = foundCerts[0]; // Get first matching certificate 
    } 
} 
finally 
{ 
    store.Close(); 
}