C # Ignorer les erreurs de certificate?

Je reçois l’erreur suivante lors d’une demande de service Web sur un service Web distant:

Impossible d’établir une relation de confiance pour le canal sécurisé SSL / TLS. —> System.Security.Authentication.AuthenticationException: le certificate distant est invalide selon la procédure de validation.

Y a-t-il de toute façon ignorer cette erreur et continuer?

Il semble que le certificate distant ne soit pas signé.

Le site www.czebox.cz je me connecte est www.czebox.cz – alors n’hésitez pas à visiter le site, et remarquez que même les navigateurs renvoient des exceptions de sécurité.

Ajoutez un gestionnaire de validation de certificate. Le retour de true permettra d’ignorer l’erreur de validation:

 ServicePointManager .ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 

Méthode IgnoreBadCertificates:

 //I use a method to ignore bad certs caused by misc errors IgnoreBadCertificates(); // after the Ignore call i can do what ever i want... HttpWebRequest request_data = System.Net.WebRequest.Create(urlqueryssortingng) as HttpWebRequest; /* and below the Methods we are using... */ ///  /// Together with the AcceptAllCertifications method right /// below this causes to bypass errors caused by SLL-Errors. ///  public static void IgnoreBadCertificates() { System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); } ///  /// In Short: the Method solves the Problem of broken Certificates. /// Sometime when requesting Data and the sending Webserverconnection /// is based on a SSL Connection, an Error is caused by Servers whoes /// Certificate(s) have Errors. Like when the Cert is out of date /// and much more... So at this point when calling the method, /// this behaviour is prevented ///  ///  ///  ///  ///  /// true private static bool AcceptAllCertifications(object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificateion, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; } 

La raison pour laquelle il échoue n’est pas parce qu’il n’est pas signé, mais parce que le certificate racine n’est pas approuvé par votre client. Plutôt que de désactiver la validation SSL, une autre approche consisterait à append le certificate CA racine à la liste des autorités de certificateion approuvées par votre application.

Ceci est la certificateion racine CA que votre application ne fait pas confiance actuellement:

—– —– BEGIN CERTIFICATE MIIFnDCCBISgAwIBAgIBZDANBgkqhkiG9w0BAQsFADBbMQswCQYDVQQGEwJDWjEs MCoGA1UECgwjxIxlc2vDoSBwb8WhdGEsIHMucC4gW0nEjCA0NzExNDk4M10xHjAc BgNVBAMTFVBvc3RTaWdudW0gUm9vdCBRQ0EgMjAeFw0xMDAxMTkwODA0MzFaFw0y NTAxMTkwODA0MzFaMFsxCzAJBgNVBAYTAkNaMSwwKgYDVQQKDCPEjGVza8OhIHBv xaF0YSwgcy5wLiBbScSMIDQ3MTE0OTgzXTEeMBwGA1UEAxMVUG9zdFNpZ251bSBS b290IFFDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoFz8yBxf 2gf1uN0GGXknvGHwurpp4Lw3ZPWZB6nEBDGjSGIXK0Or6Xa3ZT + tVDTeUUjT133G 7Vs51D6z / ShWy + 9T7a1f6XInakewyFj8PT0EdZ4tAybNYdEUO / dShg2WvUyfZfXH 0jmmZm6qUDy0VfKQfiyWchQRi / Ax6zXaU2 + X3hXBfvRMr5l6zgxYVATEyxCfOLM9 a5U6lhpyCDf2Gg6dPc5Cy6QwYGGpYER1fzLGsN9stdutkwlP13DHU1Sp6W5ywtfL owYaV1bqOOdARbAoJ7q8LO6EBjyIVr03mFusPaMCOzcEn3zL5XafknM36Vqtdmqz iwr + 3URAUgqE0wIDAQABo4ICaTCCAmUwgaUGA1UdHwSBnTCBmjAxoC + gLYYraHR0 cDovL3d3dy5wb3N0c2lnbnVtLmN6L2NybC9wc3Jvb3RxY2EyLmNybDAyoDCgLoYs aHR0cDovL3d3dzIucG9zdHNpZ251bS5jei9jcmwvcHNyb290cWNhMi5jcmwwMaAv oC2GK2h0dHA6Ly9wb3N0c2lnbnVtLnR0Yy5jei9jcmwvcHNyb290cWNhMi5jcm ww gfEGA1UdIASB6TCB5jCB4wYEVR0gADCB2jCB1wYIKwYBBQUHAgIwgcoagcdUZW50 byBrdmFsaWZpa292YW55IHN5c3RlbW92eSBjZXJ0aWZpa2F0IGJ5bCB2eWRhbiBw b2RsZSB6YWtvbmEgMjI3LzIwMDBTYi4gYSBuYXZhem55Y2ggcHJlZHBpc3UvVGhp cyBxdWFsaWZpZWQgc3lzdGVtIGNlcnRpZmljYXRlIHdhcyBpc3N1ZWQgYWNjb3Jk aW5nIHRvIExhdyBObyAyMjcvMjAwMENvbGwuIGFuZCByZWxhdGVkIHJlZ3VsYXRp b25zMBIGA1UdEwEB / wQIMAYBAf8CAQEwDgYDVR0PAQH / BAQDAgEGMB0GA1UdDgQW BBQVKYzFRWmruLPD6v5LuDHY3PDndjCBgwYDVR0jBHwweoAUFSmMxUVpq7izw + r + S7gx2Nzw53ahX6RdMFsxCzAJBgNVBAYTAkNaMSwwKgYDVQQKDCPEjGVza8OhIHBv xaF0YSwgcy5wLiBbScSMIDQ3MTE0OTgzXTEeMBwGA1UEAxMVUG9zdFNpZ251bSBS b290IFFDQSAyggFkMA0GCSqGSIb3DQEBCwUAA4IBAQBeKtoLQKFqWJEgLNxPbQNN 5OTjbpOTEEkq2jFI0tUhtRx // 6zwuqJCzfO / KqggUrHBca + GV / qXcNzNAlytyM71 FMV / VwgL9gBHTN / IFIw100JbciI23yFQTdF / UoEfK / m + IFfirxSRi8LRERdXHTEb vwxMXIzZVXloWvX64UwWtf4Tvw5bAoPj0O1Z2ly4aMTAT2a + y + z184UhuZ / oGyMw eIakmFM7M7RrNki507jiSLTzuaFMCpyWOX7ULIhzY6xKdm5iQLjTvExn2JTvVChF Y + Juu / G0zAdLyeU4vaXdQm1A8AEiJPTd0Z9LAxL6Sq2iraLNN36 + NyEK / ts3mPLL

—– CERTIFICAT DE FIN —–

Vous pouvez décoder et visualiser ce certificate en utilisant

ce décodeur de certificate ou un autre décodeur de certificate

Autoriser tous les certificates est très puissant mais cela pourrait aussi être dangereux. Si vous souhaitez autoriser uniquement les certificates valides et certains certificates, cela peut se faire comme ceci.

 System.Net.ServicePointManager.ServerCertificateValidationCallback += delegate ( object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { return true; //Is valid } if (cert.GetCertHashSsortingng() == "99E92D8447AEF30483B1D7527812C9B7B3A915A7") { return true; } return false; }; 

Mettre à jour:

Comment obtenir la valeur cert.GetCertHashSsortingng() dans Chrome:

Cliquez sur Secure ou Not Secure dans la barre d’adresse.

entrer la description de l'image ici

entrer la description de l'image ici

Cliquez ensuite sur Certificat -> Détails -> Empreinte et copiez la valeur. N’oubliez pas de faire cert.GetCertHashSsortingng().ToLower() .

entrer la description de l'image ici

Pour désactiver la validation du certificate ssl dans la configuration du client.

          

Ce code a fonctionné pour moi. J’ai dû append TLS2 car c’est ce que l’URL qui m’intéressait utilisait.

 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; }; using (var client = new HttpClient()) { client.BaseAddress = new Uri(UserDataUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); Task response = client.GetSsortingngAsync(UserDataUrl); response.Wait(); if (response.Exception != null) { return null; } return JsonConvert.DeserializeObject(response.Result); } 

Si vous utilisez des sockets directement et que vous vous authentifiez en tant que client, la méthode de rappel de Service Point Manager ne fonctionnera pas. Voici ce qui a fonctionné pour moi. S’IL VOUS PLAÎT UTILISER À DES FINS DE TEST UNIQUEMENT .

 var activeStream = new SslStream(networkStream, false, (a, b, c, d) => { return true; }); await activeStream.AuthenticateAsClientAsync("computer.local"); 

La clé ici est de fournir le rappel de validation de certificate distant directement dans le constructeur du stream SSL.

Pour développer davantage la publication de BIGNUM – Idéalement, vous voulez une solution qui simule les conditions que vous verrez dans la production et qui modifie votre code ne le fera pas et pourrait être dangereuse si vous oubliez de sortir le code avant de le déployer.

Vous aurez besoin d’un certificate auto-signé de quelque sorte. Si vous savez ce que vous faites, vous pouvez utiliser le binary BIGNUM posté, mais sinon vous pouvez aller chercher le certificate. Si vous utilisez IIS Express, vous en aurez déjà un, il vous suffira de le trouver. Ouvrez Firefox ou n’importe quel navigateur que vous aimez et allez sur votre site de développement. Vous devriez pouvoir afficher les informations du certificate à partir de la barre d’URL et, selon votre navigateur, vous devriez pouvoir exporter le certificate dans un fichier.

Ensuite, ouvrez MMC.exe et ajoutez le composant logiciel enfichable Certificat. Importez votre fichier de certificate dans le magasin Autorités de certificateion racine de confiance et c’est tout ce dont vous avez besoin. Il est important de s’assurer qu’elle entre dans ce magasin et non dans un autre magasin comme «Personnel». Si vous n’êtes pas familier avec MMC ou les certificates, il existe de nombreux sites Web avec des informations sur la façon de procéder.

Désormais, votre ordinateur dans son ensemble se fiera implicitement aux certificates générés par lui-même et vous n’aurez pas besoin d’append de code pour gérer cela spécialement. Lorsque vous passerez à la production, il continuera à fonctionner à condition que vous disposiez d’un certificate valide. Ne faites pas cela sur un serveur de production – ce serait dommage et cela ne fonctionnera pas pour d’autres clients que ceux du serveur lui-même.