2009-02-20 3 views
2

J'utilise WCF pour que le client accède au service. J'essaie d'accéder au point de terminaison avec TLS (https). J'ai des certificats avec des clés privées et publiques.Erreur SSL RemoteCertificateNameMismatch

Si le point de terminaison du service doit avoir le même nom d'hôte que le nom du certificat ("Émis vers"), je suis en mesure d'accéder au service depuis le client. Si les noms des noms de domaine "émis à" et "point de terminaison" sont différents, j'obtiens l'erreur "Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS avec autorité". J'ai ajouté les certificats à "Racine de confiance", "Personnel" et "Personnes de confiance". Dans mon service j'ai utilisé "PeerOrChainTrust".

S'il vous plaît laissez-moi savoir si quelqu'un a une idée à ce sujet.

Merci, Jan

+0

Voir: http://stackoverflow.com/questions/338385/how-do-i-tell-wcf-to-skip-verification-of-the-certificate/479914 –

Répondre

-1

Je ne pense pas que vous pouvez remplacer le vérifier si le nom du certificat correspond au nom du serveur.

Certains agents vous permettent de remplacer manuellement après les avertissements, mais à moins que WCF ne dispose d'un paramètre pour désactiver la validation du certificat avec tous les dangers que cela entraîne. Le protocole SSL est conçu avant tout pour que le client puisse valider le serveur auquel il s'adresse, sans quoi vous serez ouvert à toutes sortes de vulnérabilités (y compris les serveurs man-in-the-middle et faux).

1

Dans ce cas, vous devez définir la stratégie d'approbation pour le serveur sur le côté client,

Appel SetCertPolicy une fois avant de faire un appel aux services.

using System.Net; 
using System.Security.Cryptography.X509Certificates; 
     public static void SetCertPolicy() 
     { 
      ServicePointManager.ServerCertificateValidationCallback += RemoteCertValidate; 
     } 

     private static bool RemoteCertValidate(object sender, X509Certificate cert, X509Chain chain, 
      SslPolicyErrors error) 
     { 
      // trust any cert!!! 
      return true; 
     }