2008-09-24 9 views
4

J'utilise le code suivant pour m'assurer que tous les certificats sont valides, même ceux qui ne sont pas valides, mais je voudrais savoir s'il existe un meilleur moyen, L'événement est appelé globalement et je veux seulement que le certificat passe pour un certain appel HTTP et pas pour d'autres qui se passent de manière asynchrone.Quelle est la meilleure façon de gérer les certificats SSL non valides en C#

// This delegate makes sure that non-validating SSL certificates are passed 
ServicePointManager.ServerCertificateValidationCallback = delegate(object certsender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
}; 

Le code ci-dessus est juste un exemple d'ignorer toute non-validation sur le certificat. Le problème que j'ai, c'est que c'est un événement global. Je ne peux pas voir à quelle session l'événement se passe. Je pourrais avoir un couple de demandes http en cours et je veux demander à l'utilisateur pour une action pour chaque demande.

+1

Cela ne va-t-il pas à l'encontre de l'objectif de sécuriser vos communications avec TLS/SSL? – Alexander

+1

Non - il vous ouvre juste dans les attaques de Man In the Middle (MITM) - vous obtenez toujours le cryptage sur le fil (qui, à mon humble avis est le plus important de toute façon). –

+0

Je pense que je devrais mieux expliquer ma question un peu plus - éditera ... –

Répondre

1

Qu'en est-il de l'argument certsender? Est-ce qu'il contient quelque chose de sensé pour que vous sachiez à quelle connexion le rappel se produit? J'ai vérifié l'API .NET mais elle ne dit pas ce que l'argument est supposé contenir ...

+0

Assez drôle je pensais que je l'ai vérifié, mais je suis retourné à cause de ce poste et oui, certsender est en fait l'objet HttpRequest qui aide énormément. Merci de m'avoir fait vérifier à nouveau;) –

1

Eh bien, vous pourriez réellement prendre la peine de vérifier certains de ces paramètres. ;) Par exemple, si vous avez un certificat auto-signé, alors laissez seulement error == SslPolicyErrors.RemoteCertificateChainError à travers. Vous pouvez également vérifier l'émetteur, le nom, etc. sur le certificat lui-même pour plus de sécurité.

Questions connexes