2010-02-18 4 views
1

Avant que quiconque n'indique que ceci soit un doublon de l'autre baril plein de questions sur WCF, je ne veux pas de liens MSDN et de références d'article de blog. Je peux Google pour moi-même, et cela depuis 3 jours, donc si tout ce que vous avez sont des liens Google, s'il vous plaît abstenez-vous.IIS Hosted SSL WCF Service - Problème de certificat ou d'autorisation

Je passe beaucoup de temps avec un service WCF hébergé par IIS en utilisant wsHttpBinding et un authentificateur de mot de passe personnalisé. IIS fonctionne correctement pour mes services non sécurisés ASPX et WCF standard (en utilisant wsHttpBinding avec mode de sécurité = "None", mais en essayant le mode de sécurité = "Message" ou "Transport" nécessite un certificat SSL dans le mix. que je reçois cette erreur: "Le certificat 'CN = SignedByCA' doit avoir une clé privée qui est capable d'échanger des clés.Le processus doit avoir des droits d'accès pour la clé privée."

Par ma recherche, soit le service d'hébergement mon service WCF ne peut pas accéder au fichier clé privée de mon certificat, ou je n'ai pas générer le certificat correctement

I généré les clés à l'aide.

makecert -n "CN=TempCA" -r -sv TempCA.pvk TempCA.cer 
    makecert -sk SignedByCA -iv TempCA.pvk -n "CN=SignedByCA" -ic TempCA.cer SignedByCA.cer -sr currentuser -ss My 

J'ai ensuite importé le certificat TempCA dans mon magasin Trusted Root Certification Authority, et j'ai importé le SignedByCA.cer dans mon magasin "Personnel" de l'ordinateur local. WCF peut maintenant voir le certificat, mais l'erreur ci-dessus indique quelque chose soit un problème d'autorisations ou un problème clé. J'ai essayé d'importer le CERT dans le magasin personnel de IIS Admin Service, pas de chance.

D'ailleurs, je l'ai ajouté à mon web.config pour le service:

 <serviceCertificate 
      findValue="...." 
      x509FindType="FindByThumbprint" 
      storeLocation="LocalMachine" 
      storeName="My" 
      /> 

je reçois l'erreur de mon projet client quand j'ajouter/mettre à jour la référence de service. De mes recherches, sur Windows 7, je devrais pouvoir utiliser le Gestionnaire de certificats et cliquer avec le bouton droit sur le certificat dans le composant logiciel enfichable MMC et choisir Toutes les tâches -> Gérer la clé privée .. ou un tel. Quand je clique droit sur le certificat, je ne vois pas cette option, je n'ai que ces options sous Toutes les tâches: [Ouvrir, Demander un certificat avec une nouvelle clé, Renouveler le certificat avec une nouvelle clé, Exporter ...] Cela me porte à croire un problème de cert et pas un problème de priv.

Merci d'avance.

+1

J'ai régénéré mon certificat et également créé un fichier .spc et un fichier .pfx (avec pvk2pfx.exe) et chargé le fichier .pfx dans le magasin de certificats, ce qui a exposé l'option "Gérer la clé privée" que je cherchais précédemment . Ainsi, le problème initial consistait à suivre aveuglément les instructions MSDN pour créer un fichier .cer qui n'était pas configuré pour l'échange de clés. Maintenant, je suis capable d'ajouter des autorisations à IIS. Cela a entraîné de nouveaux problèmes, en réalisant que IIS7 sur Windows 7 ne fonctionne pas sous "NETWORK SERVICE" par défaut, j'ai dû changer cela aussi. – codenheim

+0

Merci beaucoup pour le commentaire sur la modification du service par défaut qui fonctionne sous IIS7. Dès que j'ai changé, mes problèmes ont été corrigés. Très appréciée! – stuartmclark

Répondre

1

Après la régénération d'un fichier .pfx (Certificat PKCS # 12) http://msdn.microsoft.com/en-us/library/ms867088.aspx (créer un fichier .spc avec cert2spc.exe et un fichier .pfx avec pvk2pfx.exe) et le chargement du fichier .pfx dans le magasin de certificats, ce qui expose l'option "Gérer la clé privée". Le problème d'origine consistait à suivre aveuglément les instructions MSDN et à utiliser un fichier de certificat public .CER, ce qui n'était pas suffisant pour l'échange de clés. Le fichier .PFX fait l'affaire. Maintenant, je suis en mesure d'ajouter des autorisations pour les utilisateurs/services de lire la clé.

J'ai également trouvé que IIS7 sur Windows7 ne fonctionnait pas sous l'identité documentée normale "SERVICE RÉSEAU" ou "SERVICE LOCAL" mais fonctionnait sous "ApplicationPoolIdentity". Donc, après avoir changé d'identité, ce problème a été résolu, (juste un autre désagrément pour faire décoller WCF).