WebClient + HTTPS Questions
Je suis actuellement à l'intégration avec un système créé par une 3ème partie. Ce système me demande d'envoyer une demande à l'aide de XML/HTTPS. La 3ème partie m'envoyer le certificat et je l'ai installé
J'utilise le code suivant:
using (WebClient client = new WebClient())
{
client.Headers.Add(HttpRequestHeader.ContentType, "text/xml");
System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding();
var response = client.UploadData(address, "POST", encoding.GetBytes(msg));
}
Ce code renvoie la suivante WebException
:
La connexion sous-jacente a été fermée: impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS.
Mise à JOUR Parce que c'est un serveur de test, je suis en train de travailler contre, le certificat n'est pas approuvé et la validation échoue... Pour contourner ce test/debug de l'environnement, de créer une nouvelle ServerCertificateValidationCallback
ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(bypassAllCertificateStuff);
et voici mon "faux" rappel
private static bool bypassAllCertificateStuff(object sender, X509Certificate cert, X509Chain chain, System.Net.Security.SslPolicyErrors error)
{
return true;
}
- Aller ici.
- +1 pour la mise à jour avec le code que vous avez utilisé. Belle solution rapide pour moi à cause de ça.
- Cela a été très utile au lieu d'inscrire le fiddler autorité de certification racine dans mon dev-machine lors du débogage SSL webservices! Je viens de mettre un #if DEBUG autour de la partie qui a ajouté le mannequin de rappel à ne pas le mettre dans le code de production.
- Cela fonctionne bien pour .NET 4.5, mais pas 4.6. Je me demande pourquoi.
Vous devez vous connecter pour publier un commentaire.
Le plus court de la notation du code pour permettre à tous les certificats est en réalité:
Et fonctionne bien pour cette erreur. Inutile de dire que vous devez fournir une mise en œuvre qui, en fait, vérifie le certificat et décide sur la base du certificat d'information, si la communication est sûr. À des fins de test, utilisez la ligne de code.
ServicePointManager.ServerCertificateValidationCallback = Function() True
Pour l'VB.NET la version de l'original de la réponse, ici vous allez (convertisseurs ne fonctionnent pas bien lorsqu'il est nécessaire de relier les événements avec le "AddressOf' opérateur). 1er du code qui va de l'avant à l'aide d'un WebClient() ou HttpWebRequest() de l'objet:
..et le filaire code de la méthode:
Essayer, ça fonctionne: