2008-10-13 6 views
3

J'ai un service auto-hébergé auquel je souhaite ajouter la sécurité de transport. J'ai défini WSHttpBinding.SecurityMode sur Transport et ClientCredentialType sur HttpClientCredentialType.None. J'ai créé un certificat et mis à mon hôte avec ServiceHost.Credentials.ServiceCertificate.SetCertificate() Je suis également inscrit à l'aide http netsh ajouter sslcert ipport = 127.0.0.1: 80 certhash = [MyCertHash] certstorename = MY appid = [TheGuidOfTheAppTahtRunsTheService] verifyclientcertrevocation = désactiverService WCF auto-hébergé avec sécurité de transport (L'authentification a échoué car la partie distante a fermé le flux de transport.)

Je reçois le message d'erreur suivant chaque fois que je tente d'appeler le service: « l'authentification a échoué parce que la partie à distance a fermé le flux de transport. » Cela signifie-t-il que le client et le serveur essaient de s'authentifier mutuellement? Comment puis-je le désactiver? Pour clarifier les choses, je ne veux pas installer de certificat chez le client, je ne cherche pas d'authentification atm, juste en sécurisant le contenu des messages, si c'est possible.

+0

Ajoutez la journalisation à votre serveur WCF et utilisez le Service Trace Viewer de Vista SDK pour voir quelle est l'erreur exacte! Ne pas oublier la probabilité que l'erreur est dans votre code. – sajidnizami

+0

Le service fonctionne bien sans sécurité de transport. –

Répondre

2

Ce MSDN post peut vous aider à résoudre votre problème. La demande initiale dans la publication est de configurer un autre mode de sécurité que le vôtre, mais ils passent en mode Transport pour le dépannage et cette information devrait s'appliquer à votre situation. Si vous décrivez tout ce que vous avez fait pour installer le certificat, il vous manque quelques étapes. Le message décrit le processus d'obtention d'un certificat valide installé. Bonne chance!!

+0

Merci, mais je n'utilise pas le certificat pour l'authentification, juste pour le cryptage, donc c'est un scénario assez différent. Quoi qu'il en soit, j'ai ajouté le certificat à TrustedPeople mais cela n'a pas aidé. –

2

Les certificats peuvent être une douleur dans le cul quelques fois pour obtenir le travail. La première chose que vous devriez toujours faire avec WCF est à son tour sur le traçage:

http://msdn.microsoft.com/en-us/library/ms733025.aspx

Ensuite, vous pouvez utiliser SVCTraceViewer pour afficher les exceptions que votre service génère dans les coulisses et obtenir un petit aperçu de ce qui se passe, ce qui est un must avec de nombreux problèmes WCF. 9 fois sur 10, la trace vous dira tout ce que vous devez savoir.

Assurez-vous également que le certificat du client et du serveur est configuré, car le certificat doit être installé sur les deux machines.

2

J'essayais de retrouver cette même erreur, et je suis tombé sur ce post. Le suivi WCF n'aide pas car l'erreur apparaît du côté client dans la pile HTTP et côté serveur, la demande est rejetée avant qu'elle ne parvienne à la couche WCF. J'ai trouvé que je n'étais pas assez approfondie. Assurez-vous que toutes les conditions suivantes sont remplies. J'ai eu quelques-uns, mais pas tous ces correctement mis en place:

  1. émetteur du certificat du serveur a un valide et correspondant émission autorité de certification racine de confiance sur la même machine.

  2. Le nom du sujet du certificat serveur correspond au nom de la machine exactement, et le nom de la machine du client accède correspond aussi (« localhost » vs Environment.MachineName valeur du serveur)

  3. appose son empreinte digitale du certificat du serveur a été défini par un administrateur en utilisant la commande suivante (utiliser netsh équivalent pour les versions plus récentes de Windows)

    httpcfg set ssl -i 0.0.0.0:{port} -h {thumbprint} 
    
  4. Ce client possède également le même certificat d'autorité de certification racine valide sur l'ordinateur client.

Voici une bonne référence: SSL with Self-hosted WCF Service.

Questions connexes