2010-05-08 7 views
25

J'ai un service web WCF fonctionnant sous IIS 7 en utilisant un certificat auto-signé (c'est une preuve de concept pour m'assurer que c'est la route que je veux suivre). Il est nécessaire d'utiliser SSL.Est-il possible de forcer le client de test WCF à accepter un certificat auto-signé?

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

Lorsque je tente je reçois cette erreur:

Error: Cannot obtain Metadata from https:///Service1.svc If this is a Windows (R) Communication Foundation service to which you have access, please check that you have enabled metadata publishing at the specified address. For help enabling metadata publishing, please refer to the MSDN documentation at http://go.microsoft.com/fwlink/?LinkId=65455.WS-Metadata Exchange Error URI: https:///Service1.svc Metadata contains a reference that cannot be resolved: 'https:///Service1.svc'. Could not establish trust relationship for the SSL/TLS secure channel with authority ''. The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.HTTP GET Error URI: https:///Service1.svc There was an error downloading 'https:///Service1.svc'. The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. The remote certificate is invalid according to the validation procedure.

EDIT: Cette question est particulièrement sur l'utilisation du client test WCF 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 que je ne vois pas un moyen de le faire.

Répondre

-4

Vous pouvez fournir votre propre méthode pour valider le certificat.

Essayez ceci:

ServicePointManager.ServerCertificateValidationCallback += 
      new System.Net.Security.RemoteCertificateValidationCallback(EasyCertCheck); 

Le rappel:

bool EasyCertCheck(object sender, X509Certificate cert, 
     X509Chain chain, System.Net.Security.SslPolicyErrors error) 
{ 
    return true; 
} 
+0

Je ne vois aucun moyen d'ajouter ce code au client de test WCF (code que je ne contrôle pas). J'ai déjà ajouté cet appel à mon propre code (côté serveur). –

+0

Bien sûr, c'est exactement la bonne approche si vous essayez de forcer un autre client C# WCF à accepter un certificat de sécurité auto-signé. – stephen

3

vous devriez être en mesure de le faire si vous remplacez le client test WCF avec WCFStorm Lite Edition. C'est gratuit et est un peu plus flexible que le client de test de MS ... par exemple, il vous permettra de spécifier un nom d'utilisateur & mot de passe si vous faites l'authentification du nom d'utilisateur.

+4

Si vous êtes comme moi et que vous n'aimez pas télécharger des logiciels dont vous n'avez jamais entendu parler, voici la revue Visual Studio de WFCStorm. http://visualstudiomagazine.com/articles/2012/10/29/free-tool-wcfstorm.aspx –

3

La réponse de this question m'a aidé dans mon cas. Assurez-vous d'utiliser le nom d'ordinateur exact comme attendu. Pour exampe machine/service.svc peut ne pas fonctionner, tandis que machine.domain/service.svc - fonctionne.

+0

Le mien était dans l'autre sens (comme dans machine.domaine a échoué pendant que la machine a juste travaillé). Merci! – johnofcross

12

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 autosigné-

    makecert -r -pe -n "CN=My Root Authority" -a sha1 -sky signature 
        -ss CA -sr CurrentUser 
        -cy authority 
        -sv CA.pvk CA.cer
  2. Créer un certificat non auto-signé pour SSL qui a signé par ce certificat racine, puis créez PFX fichier à partir de ce

    makecert -pe -n "CN=servername" -a sha1 -sky exchange 
        -eku 1.3.6.1.5.5.7.3.1 -ic CA.cer -iv CA.pvk 
        -sp "Microsoft RSA SChannel Cryptographic Provider" 
        -sy 12 -sv server.pvk server.cer 
    
    pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx

maintenant il vous suffit d'importer le server.pfx dans IIS et configurer le s Web ite contraignant à utiliser ce certificat et également installer le CA.cer dans Local Computer \ Trusted Root Certification Authorities stocker dans le serveur et le client en faisant ce client WCF fonctionnerait avec le service via HTTPS sans aucun problème.

+0

+1 pour des informations détaillées – bugnuker

+3

You beauty! une autre astuce est que vous pouvez obtenir une erreur de mot de passe invalide que vous pouvez résoudre en passant le mot de passe sur la ligne de commande sur la dernière ligne: pvk2pfx -pvk server.pvk -pi "yourpw" -spc server.cer -pfx server.pfx -po "yourpw" –

+0

J'ai eu une erreur au sujet d'un mot de passe incorrect lors de l'ajout du fichier pfx sur le serveur, mais j'ai simplement sauté un mot de passe et tout semblait aller bien. –

1

Pour répondre à votre question ... voici comment vous obligez votre client test WCF d'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; 
     } 
+0

Je pense qu'il voulait dire le _WCFTestClient.exe_. Quoi qu'il en soit, votre réponse m'a aidé avec mon projet client WCF ** **. –

Questions connexes