Nous ne pouvons pas nous connecter à un serveur HTTPS en utilisant WebRequest
à cause de ce message d'erreur :
`La requête a été interrompue : Could not create SSL/TLS secure channel".
Nous savons que le serveur n’a pas de certificat HTTPS valide avec le chemin utilisé, mais pour contourner ce problème, nous utilisons le code suivant que nous avons pris dans un autre post de StackOverflow :
private void Somewhere() {
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}
private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
return true;
}
Le problème est que le serveur ne valide jamais le certificat et échoue avec l'erreur ci-dessus. Quelqu'un a-t-il une idée de ce que je dois faire ?
Je dois mentionner qu'un collègue et moi avons effectué des tests il y a quelques semaines et que cela fonctionnait bien avec quelque chose de similaire à ce que j'ai écrit ci-dessus. La seule "grande différence" que nous avons trouvée est que j'utilise Windows 7 et lui Windows XP. Cela change-t-il quelque chose ?
Le problème que vous rencontrez est que l'utilisateur d'aspNet n'a pas accès au certificat. Vous devez lui donner accès à l'aide de winhttpcertcfg.exe.
Vous trouverez un exemple de configuration à l'adresse suivante : [http://support.microsoft.com/kb/901183][1]
Sous l'étape 2 dans plus d'informations
[1] : http://support.microsoft.com/kb/901183
EDIT : Dans les versions plus récentes de IIS, cette fonction est intégrée à l'outil de gestion des certificats - et est accessible en faisant un clic droit sur le certificat et en utilisant l'option de gestion des clés privées. Plus de détails ici : https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791
L'erreur est générique et il existe de nombreuses raisons pour lesquelles la négociation SSL/TLS peut échouer. La plus courante est un certificat de serveur invalide ou expiré, et vous avez pris soin de cela en fournissant votre propre crochet de validation de certificat de serveur, mais ce n'est pas nécessairement la seule raison. Le serveur peut exiger une authentification mutuelle, il peut être configuré avec une suite de chiffres non supportée par votre client, il peut avoir une dérive temporelle trop importante pour que la poignée de main réussisse et bien d'autres raisons encore.
La meilleure solution consiste à utiliser l'ensemble d'outils de dépannage SChannel. SChannel est le fournisseur SSPI responsable de SSL et TLS et votre client l'utilisera pour la poignée de main. Consultez la rubrique [Outils et paramètres TLS/SSL][1].
Consultez également [Comment activer la journalisation des événements de Schannel][2].
[1] : http://technet.microsoft.com/en-us/library/cc776467%28WS.10%29.aspx [2] : http://support.microsoft.com/kb/260729