2008-10-27 11 views
1

J'ai un service Web protégé en demandant à l'application tierce consommatrice de transmettre un certificat client. J'ai installé le certificat sur le service web fournissant en production et sur le client aussi bien. Ce processus fonctionne actuellement très bien pour les autres clients avec une configuration similaire. La version actuelle est écrite en .NET 3.5 et fonctionne parfaitement sur ma machine de développement sous cassini (et en fonctionnement autonome), mais refuse de travailler sur ma machine de production avec le même code et la même configuration de certificat. J'ai confirmé que le service Web du fournisseur accepte le certificat installé sur le client via le navigateur, mais lorsque le CERT est ajouté à un appel de service Web par programmation, j'obtiens un 403, l'accès est refusé. Je produis l'empreinte digitale du certificat ajouté à l'appel avant de faire la demande au webservice protégé, et c'est en effet le bon certificat attaché. Je pense que quelque part le long de la ligne, il n'a pas accès à la partie clé privée du certificat.La transmission d'un certificat client ne fonctionne que sur ma machine

Des idées?

Remarque: J'ai accordé l'accès au processus IIS aux répertoires ~/crypto pertinents.

Ceci est C# et .NET 3.5

+0

Cet article est également utile pour diagnostiquer le problème dans un nouvel environnement: http://support.microsoft.com/kb/901183 –

+0

winhttpcertcfg.exe est essentiel pour un diagnostic correct. –

Répondre

2

J'ai eu ce genre de problème il y a quelques semaines. La solution dans mon cas était d'utiliser l'emprunt d'identité afin d'obtenir un accès approprié au magasin de certificats. Par défaut, le thread de travail IIS était en cours d'exécution en tant qu'utilisateur système et n'avait donc pas accès au magasin approprié. Ajouter le certificat à un magasin d'utilisateurs spécifique et usurper l'identité de cet utilisateur a résolu tous les problèmes. Cependant, je continuerai à regarder cette question, car je sais que l'usurpation d'identité n'est pas une solution miracle, et qu'il y aura des problèmes qui en découlent dans ce scénario.

+0

Votre message m'a conduit dans la bonne direction. Merci ZombieSheep! –

0

Il y a une raison distincte cela ne fonctionnait pas sur ma machine. Lors de l'exécution dans Visual Studio, il fonctionne avec mes informations d'identification, qui ont été utilisées pour installer le certificat. Ainsi, a automatiquement l'autorisation d'accéder au magasin de clés privé sur la machine. Cependant lors de l'exécution en dehors de cassini (dans l'IDE), le processus IIS n'a pas autorisations pour accéder au magasin de clés privées.

Solution temporaire: Exécutez le domaine d'application en tant que système local. Mauvais pour la sécurité, mais il fait fonctionner l'application (même si elle est assistée par bande) jusqu'à ce que je puisse trouver une solution plus permanente.