WCF - ne peut pas trouver le certificat X.509 En utilisant les critères de recherche suivants

StackOverflow https://stackoverflow.com/questions/1134055

  •  16-09-2019
  •  | 
  •  

Question

Ok, je l'ai vu plusieurs questions liées à cette question, et je l'ai essayé beaucoup des idées présentées dans leur sans succès. Voici ma situation:

Je suis frappé un service Web sur l'intranet de mon entreprise. Je l'ai utilisé svcutil.exe pour générer la classe client pour WCF. Je suis en mesure d'exécuter l'appel de service Web sans problème lorsque le service était en développement et n'a pas besoin d'informations d'authentification, donc je sais que le code fonctionne. A l'époque, le code a été exécuté sur SSL. J'ai importé le certificat requis dans le magasin racine de confiance des autorités de certification, et tout allait bien.

Nous venons d'emménager dans un environnement de scène, et le service a été mis à niveau pour exiger des informations d'identification pour se connecter. Je changé mon lien avec le nouveau point final, et a ajouté le code pour authentifier. Ceci est ma première fois de travailler avec WCF, donc s'il vous plaît garder avec moi sur des erreurs évidentes. Mon problème est que je ne trouve pas le certificat via le code à transmettre au service pour l'authentification. Je fonde ce hors de quelques exemples de code en ligne je trouve.

Voici un exemple de ma config générée par svcutil:

<system.serviceModel>
  <bindings>
   <basicHttpBinding>
    <binding 
        name="xxxSOAPBinding" 
        .... (irrelevant config settings)....
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
      maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="Transport">
      <transport clientCredentialType="Certificate" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>
  <client>
   <endpoint address="https://xxxServices_1_0_0"
    binding="basicHttpBinding" bindingConfiguration="xxxSOAPBinding" 
    contract="xxxService" name="xxxService" />
  </client>
 </system.serviceModel>

Et voici le code que je utilise pour essayer de se connecter. L'exception est levée dès que je tente de localiser le certificat:

using (var svc = new xxxServiceClient())
{
    svc.ClientCredentials.UserName.UserName = "XXX";
    svc.ClientCredentials.UserName.Password = "XXX";

    svc.ClientCredentials.ClientCertificate
     .SetCertificate(StoreLocation.LocalMachine, StoreName.Root, 
                     X509FindType.FindBySubjectName, "xxx");
...
}

Je l'ai essayé plusieurs X509FindTypes différents, et les adaptés aux valeurs du cert sans succès. Y at-il quelque chose de mal avec mon code? Y at-il une autre façon que je peux interroger le magasin de cert pour valider les valeurs je passe?

La machine dev où je suis en cours d'exécution Visual Studio a le cert importé.

Était-ce utile?

La solution

Deux questions idiotes:

  • vous vous votre Certificiate est installé du tout?
  • est-ce un Certificiate spécialement pour cette machine de mise en scène?

En outre, il semble un peu bizarre que vous êtes d'abord le nom d'utilisateur / mot de passe de réglage, puis en définissant également les informations d'identification. Pouvez-vous commenter la partie nom d'utilisateur / mot de passe? Est-ce que faire une différence?

Marc

Autres conseils

Êtes-vous sûr que le certificat a été importé au magasin de la machine locale, il pourrait être dans le magasin CurrentUser.

Cela peut sembler stupide, mais êtes-vous certain que le nouveau cert pour le service de la mise en scène a été installé dans votre magasin de cert? Ce qui est le plus probable que votre problème.

En outre, puisque vous ne l'avez pas mentionné ce exception est levée, il est possible que le problème est que vous avez défini les informations d'identification nom d'utilisateur / mot de passe avant de les informations d'identification ClientCertificate, lorsque votre liaison n'indique pas l'utilisation du nom d'utilisateur / mot de passe. Peut-être un problème là; ils sont mutuellement exclusifs, IIRC.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top