Mon logiciel se connecte à Dropbox en utilisant une connexion HTTPS afin de récupérer certaines données sensibles.C# .NET - Épinglage des certificats Autorités - Je le fais correctement?
Je voudrais épingler les autorités de certificats afin d'éviter une attaque de type man-in-the-middle.
Jusqu'à présent, j'ai le code suivant:
static bool VerifyServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
try
{
var currentCaPublicKey = chain.ChainElements.Cast<X509ChainElement>().Last().Certificate.GetPublicKeyString();
var caPublicKeys = new List<string>(){"00ad0e15cee443805cb187f3b760f97112a5aedc269488aaf4cef520392858600cf880daa9159532613cb5b128848a8adc9f0a0c83177a8f90ac8ae779535c31842af60f98323676ccdedd3ca8a2ef6afb21f25261df9f20d71fe2b1d9fe1864d2125b5ff9581835bc47cda136f96b7fd4b0383ec11bc38c33d9d82f18fe280fb3a783d6c36e44c061359616fe599c8b766dd7f1a24b0d2bff0b72da9e60d08e9035c678558720a1cfe56d0ac8497c3198336c22e987d0325aa2ba138211ed39179d993a72a1e6faa4d9d5173175ae857d22ae3f014686f62879c8b1dae45717c47e1c0eb0b492a656b3bdb297edaaa7f0b7c5a83f9516d0ffa196eb085f18774f"};
return caPublicKeys.Any(s => currentCaPublicKey.Equals(s));
}
catch (Exception ex)
{
Console.WriteLine(ex);
return false;
}
}
Il fonctionne très bien, mais je ne sais pas si je vérifie les bonnes choses. Tous les conseils de certains experts en cryptographie seraient grandement appréciés.
PS: quelqu'un En cas est à la recherche de CA utilisé par Dropbox, ils sont disponibles ici: https://github.com/dropbox/dropbox-sdk-python/blob/master/dropbox/trusted-certs.crt – John
Votre code a plusieurs symboles indéfinis qui rendent la lecture difficile. (On dirait qu'ils éditent des artefacts, comme 'currentCaPk'.) – xxbbcc