J'ai un simple appel de service Web, généré par une application Windows .NET (C #) 2.0, via le proxy de service Web généré par Visual Studio, pour un service Web également écrit en C # (2.0). Cela fonctionne depuis plusieurs années et continue de le faire dans la douzaine d'endroits où il fonctionne.
Une nouvelle installation sur un nouveau site rencontre un problème. Lorsque vous essayez d'appeler le service Web, il échoue avec le message disant:
Impossible d'établir une relation d'approbation pour le canal sécurisé SSL / TLS
L'URL du service Web utilise SSL (https: //) - mais cela fonctionne depuis longtemps (et continue de le faire) à partir de nombreux autres emplacements.
Où est-ce que je regarde? Serait-ce un problème de sécurité entre Windows et .NET propre à cette installation? Si oui, où dois-je établir des relations de confiance? Je suis perdu!
Réponses:
Pensées (basées sur la douleur du passé):
serveur a-t-elle l'horloge correctement réglée (c'est-à-dire pour que l'heure UTC soit correcte [ignorer l'heure locale, elle est largement hors de propos]) - cela est certainement important pour WCF, donc peut-il avoir un impact sur SOAP régulier?la source
Les extraits suivants résoudront le cas où quelque chose ne va pas avec le certificat SSL sur le serveur que vous appelez. Par exemple, il peut être auto-signé ou le nom d'hôte entre le certificat et le serveur peut ne pas correspondre.
Cela est dangereux si vous appelez un serveur hors de votre contrôle direct, car vous ne pouvez plus être sûr de parler au serveur auquel vous pensez être connecté. Cependant, si vous avez affaire à des serveurs internes et que l'obtention d'un certificat "correct" n'est pas pratique, utilisez ce qui suit pour dire au service Web d'ignorer les problèmes de certificat et bravement de continuer.
Les deux premiers utilisent des expressions lambda, le troisième utilise du code normal. Le premier accepte tout certificat. Les deux derniers au moins vérifient que le nom d'hôte dans le certificat est celui que vous attendez.
... j'espère que vous le trouverez utile
la source
ServicePointManager.ServerCertificateValidationCallback = null;
devrait revenir au comportement par défaut.La solution très simple "catch all" est la suivante:
La solution de sebastian-castaldi est un peu plus détaillée.
la source
#If CONFIG = "Debug"
déclaration afin qu'il ne soit activé qu'en mode débogage. Ça marche super!Personnellement, j'aime le plus la solution suivante:
... puis avant de demander à obtenir l'erreur, procédez comme suit
Trouvé cela après avoir consulté la solution de Luke
la source
Si vous utilisez Windows 2003, vous pouvez essayer ceci:
Référence: http://www.outsystems.com/NetworkForums/ViewTopic.aspx?Topic=Web-Services:-Could-not-establish-trust-relationship-for-the-SSL/TLS- ...
la source
Si vous ne voulez pas faire confiance à tout le monde aveuglément et ne faire une exception de confiance que pour certains hôtes, la solution suivante est plus appropriée.
Ensuite, appelez simplement Ssl.EnableTrustedHosts au démarrage de votre application.
la source
Luke a écrit un très bon article à ce sujet .. assez simple .. essayez-le
La solution de Luke
Raison (citation de son article (moins la malédiction)) ".. Le problème avec le code ci-dessus est qu'il ne fonctionne pas si votre certificat n'est pas valide. Pourquoi devrais-je publier sur une page Web avec un certificat SSL invalide? Parce que Je suis bon marché et je n'avais pas envie de payer Verisign ou l'un des autres ** - * s pour un certificat dans ma boîte de test, donc je l'ai signé moi-même. Lorsque j'ai envoyé la demande, j'ai reçu une belle exception:
System.Net.WebException La connexion sous-jacente a été fermée. Impossible d'établir une relation d'approbation avec le serveur distant.
Je ne sais pas pour vous, mais pour moi, cette exception ressemblait à quelque chose qui serait causé par une erreur stupide dans mon code qui provoquait l'échec du POST. J'ai donc continué à chercher, à peaufiner et à faire toutes sortes de choses étranges. Ce n'est qu'après avoir googlé la chose *** n que j'ai découvert que le comportement par défaut après avoir rencontré un certificat SSL non valide consiste à lever cette exception. .. "
la source
L' outil de diagnostic SSL de Microsoft peut être en mesure d'identifier le problème.
MISE À JOUR le lien a été corrigé maintenant.
la source
Je viens de rencontrer ce problème. Ma résolution était de mettre à jour l'heure du système en effectuant une synchronisation manuelle avec les serveurs de temps. Pour ce faire, vous pouvez:
Adjust Date/Time
Internet Time
ongletChange Settings
Update Now
Dans mon cas, la synchronisation était incorrecte, j'ai donc dû cliquer plusieurs fois avant de la mettre à jour correctement. S'il continue de se mettre à jour de manière incorrecte, vous pouvez même essayer d'utiliser un serveur de temps différent du menu déroulant du serveur.
la source
Essaye ça:
Notez que vous devez travailler au moins avec le framework 4.5 .NET
la source
J'ai eu un problème similaire
.NET
application dans Internet Explorer.J'ai résolu le problème d'ajout du certificat (certificat VeriSign Class 3 dans mon cas) aux certificats des éditeurs de confiance.
Vous pouvez obtenir le certificat si vous l'exportez de:
Merci
la source
J'ai eu cette erreur en cours d'exécution sur un serveur Web avec une URL comme:
mais il n'y avait pas de certificat pour ça, donc j'ai eu un DNS appelé
Il suffit de donner un indice à cette solution ici, car elle est arrivée en tête dans Google.
la source
Pour ceux qui rencontrent ce problème via un côté client VS, une fois la référence de service ajoutée avec succès et la tentative d'exécution du premier appel, cette exception a été obtenue: «La connexion sous-jacente a été fermée: impossible d'établir une relation de confiance pour le canal sécurisé SSL / TLS» si vous utilisez (comme dans mon cas) une URL de point de terminaison avec l'adresse IP et avez obtenu cette exception, vous devrez probablement ajouter à nouveau la référence de service en procédant comme suit:
Réessayer :). Merci
la source
Dans mon cas, j'essayais de tester SSL dans mon environnement Visual Studio à l'aide d'IIS 7.
Voici ce que j'ai fini par faire pour que ça marche:
Sous mon site dans la section "Liaisons ..." à droite dans IIS, j'ai dû ajouter la liaison "https" au port 443 et sélectionner "IIS Express Developement Certificate".
Sous mon site dans la section "Paramètres avancés ..." à droite, j'ai dû changer les "protocoles activés" de "http" en "https".
Sous l'icône «Paramètres SSL», j'ai sélectionné «Accepter» pour les certificats clients.
Ensuite, j'ai dû recycler le pool d'applications.
J'ai également dû importer le certificat d'hôte local dans ma boutique personnelle à l'aide de mmc.exe.
Mon
web.config
fichier était déjà configuré correctement, donc après avoir trié tout ce qui précède, j'ai pu continuer mes tests.la source
Ma solution (VB.Net, la version "staging" (UAT) de cette application doit fonctionner avec le certificat "staging" mais ne pas affecter les requêtes une fois qu'elles sont sur le site live):
la source
Si cela ne fonctionne pas, mauvais sertificate, lorsque ServerCertificateValidationCallback renvoie true; Mon code ServerCertificateValidationCallback:
Mon code qui l'empêchait d'exécuter ServerCertificateValidationCallback:
Fonction OnValidateCertificateError:
J'ai désactivé le code CertificateValidation et ServerCertificateValidationCallback fonctionnant très bien
la source