2011-08-12 5 views
1

Je teste un service WCF sur un poste de travail local et rencontre des difficultés avec le certificat X509.Le client ne trouve pas le certificat X.509

J'ai créé un certificat et l'ai enregistré avec succès. Le certificat s'affiche dans le Gestionnaire de certificats sous Personnes/Certificats approuvés. Le comportement de service est configuré comme suit (les noms commenté que *):

<serviceCertificate findValue="*****" storeLocation="LocalMachine" 
       storeName="TrustedPeople" x509FindType="FindBySubjectName" /> 
<userNameAuthentication userNamePasswordValidationMode="Custom" 
       customUserNamePasswordValidatorType="*****.DistributorValidator, *****" /> 
<issuedTokenAuthentication certificateValidationMode="None" /> 

Mais, lorsque le service est ouvert dans le navigateur, je reçois l'erreur « System.InvalidOperationException: Impossible de trouver le certificat X.509 en utilisant les critères de recherche suivants: StoreName 'TrustedPeople', StoreLocation 'LocalMachine', FindType 'FindBySubjectName', findValue "* ***"

la même erreur se produit lorsque je tente de mettre un certificat en programmation. client de test:

serviceclient.ClientCredentials.ClientCertificate.SetCertificate(
         StoreLocation.LocalMachine, 
         StoreName.TrustedPeople, 
         X509FindType.FindBySubjectName, 
         "CN=TravelBrokerKey"); 

Il semble que la recherche par nom de sujet, empreinte ou numéro de série ne fait aucune différence. J'ai également essayé d'attraper l'exception et le débogage, mais je n'ai pas pu attacher le débogueur (donc il semble que l'exception se passe du côté du client). Également essayé d'enregistrer le certificat directement via les paramètres du navigateur, mais cela n'a pas aidé non plus.

L'environnement de test OS est Windows 7 et testé avec les navigateurs IE8 et Firefox 4.0.

Répondre

1

Je pense que vous faites une mauvaise utilisation du certificat, le certificat dans votre cas est utilisé pour identifier le service, et je pense que votre service nécessite l'utilisation côté client Type d'informations d'identification client puisque je vois que vous fournissez un UserNamePasswordValidator personnalisé, donc vous devez définir un nom d'utilisateur et un mot de passe dans vos informations client.

Vous devez spécifier le certificat du service côté client, mais pas dans ClientCredentials.ClientCertificate, qui est utilisé pour le certificat du client.

liens peuvent vous aider:

An easy way to use certificates for WCF security

How to: Use Certificate Authentication and Message Security in WCF Calling from Windows Forms

+0

Ok, qui rend les choses un peu plus clair ... mais si la balise userNameAuthentication est (temporairement) en commentaire de configuration du service, shouldn N'est-il pas possible d'afficher au moins le service dans le navigateur ou de l'ajouter en tant que référence de service à un client de test? Toujours obtenir l'exception "ne peut pas trouver x.509 .." à chaque fois. –

+0

Il semble que votre service peut être démarré correctement, si c'est le cas, je pense que le service peut trouver le certificat. Pouvez-vous vérifier si vous pouvez trouver le certificat du client manuellement? – Jack

+0

Ça a fonctionné maintenant. J'utilise un certificat pour le service, mais pas pour le client (certificat requis car j'ai un nom d'utilisateur/mot de passe personnalisé et je n'utilise pas https). Merci pour les conseils. –

Questions connexes