web-dev-qa-db-fra.com

Est-il possible de forcer le client de test WCF à accepter un certificat auto-signé?

Un service Web WCF s'exécute dans IIS 7 à l'aide d'un certificat auto-signé (preuve de concept pour vous assurer que c'est la route que je souhaite suivre). L'utilisation de SSL est obligatoire.

Est-il possible d'utiliser le client de test WCF pour déboguer ce service sans avoir besoin d'un certificat non auto-signé?

Quand j'essaye j'ai cette erreur:

Erreur: impossible d'obtenir les métadonnées à partir de https: ///Service1.svc S'il s'agit d'un service Windows (R) Communication Foundation auquel vous avez accès, vérifiez que vous avez activé la publication des métadonnées à l'adresse spécifiée. Pour obtenir de l'aide sur la publication de métadonnées, consultez la documentation MSDN à l'adresse http://go.Microsoft.com/fwlink/?LinkId=65455.WS-Metadata URI d'erreur Exchange: https: ///Service1.svc. contient une référence qui ne peut pas être résolue: 'https: ///Service1.svc'. Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS avec autorité ''. La connexion sous-jacente était fermée: Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS. Le certificat distant est invalide conformément à la procédure de validation.HTTP GET Error URI: https: ///Service1.svc Une erreur s'est produite lors du téléchargement de 'https: ///Service1.svc'. La connexion sous-jacente était fermée: Impossible d'établir une relation de confiance pour le canal sécurisé SSL/TLS. Le certificat distant n'est pas valide selon la procédure de validation.

EDIT: Cette question concerne spécifiquement l’utilisation du WCF Test Client pour tester un service Web déjà sécurisé via SSL à l’aide d’un certificat auto-signé. Le serveur est déjà configuré pour accepter n'importe quel certificat fourni, c'est le client de test WCF pour lequel je ne vois pas comment le faire.

26

Vous pouvez créer un certificat non auto-signé dans la zone de développement, puis utiliser ce certificat dans IIS pour appliquer le protocole SSL. Les étapes sont les suivantes:

  1. Créer un certificat auto-signé

    makecert -r -pe -n "CN = Mon autorité racine" -a sha1-signature signature 
     -ss CA -sr CurrentUser 
     -cy autorité 
     -sv CA.pvk CA .cer
  2. Créez un certificat non auto-signé pour SSL qui a été signé par ce certificat racine, puis créez un fichier pfx à partir de celui-ci.

    makecert -pe -n "CN = nom_serveur" -a échange shaky-sky 
     -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk 
     -sp " Fournisseur cryptographique Microsoft RSA SChannel "
     -Sy 12 -sv server.pvk server.cer 
     
     Pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

il ne vous reste plus qu'à importer le server.pfx dans le IIS et à configurer la liaison de site Web pour utiliser ce certificat et à installer également le CA.cer dans le magasin Local Computer\Trusted Root Certification Authorities à la fois sur le serveur et sur le client, ce que le client WCF fonctionnerait avec le service via HTTPS sans aucun problème.

12
Cyrus

vous devriez pouvoir le faire si vous remplacez le client de test WCF par WCFStorm Lite Edition . C'est gratuit et un peu plus flexible que le client test de MS ... par exemple, il vous permettra de spécifier un nom d'utilisateur et un mot de passe si vous effectuez une authentification par nom d'utilisateur.

3
Warren Rumak

La réponse de cette question m'a aidé dans mon cas. Veillez à utiliser exact nom de la machine comme le certificat l’attend. Pour exampe machine/service.svc peut ne pas fonctionner, alors que machine.domain/service.svc - fonctionne.

3
Petr Abdulin

Pour répondre à votre question, voici comment vous forcez votre client de test WCF à accepter un certificat auto-signé ...

        using (ServiceReference1.Service1Client proxy = new ServiceReference1.Service1Client())
        {
            System.Net.Security.RemoteCertificateValidationCallback callBack = (sender, certificate, chain, sslPolicyErrors) => true;
            ServicePointManager.ServerCertificateValidationCallback += callBack;

            Console.WriteLine(proxy.GetData(35));

            ServicePointManager.ServerCertificateValidationCallback -= callBack;
        }
2
user3118760

Oui c'est possible.

Il suffit de télécharger le fichier WSDL généré à partir du service ( https: //localhost/Service1.svc? SingleWsdl ) et de fournir le chemin d'accès à ce fichier lors de l'ajout d'un service dans le client de test WCF.

0
metalheart