2010-11-05 17 views
5

J'ai un service WCF qui utilise un certificat X.509 comme informations d'identification client. La plupart de ces informations d'identification ne nécessitent pas de mot de passe pour l'utiliser, juste pour l'installer. Mais maintenant, un de nos clients a un certificat qui nécessite un mot de passe à saisir chaque fois qu'il est utilisé (c'est à dire chaque fois que le service est en cours d'exécution). Ce service appelle un autre service n fois par jour, mais échoue si le certificat ne peut pas être validé. Jusqu'à présent, nous avons demandé à nos clients de commander (et de payer) un nouveau certificat chaque fois que nous avons eu ce problème, mais mes clients et moi sommes fatigués de le faire à chaque fois. Je n'ai pas fait le service moi-même, et je n'ai pas beaucoup d'expérience avec WCF et les services beaucoup . Ce que je voudrais savoir est: Est-il possible d'entrer ce mot de passe dans notre fichier de configuration avec toutes les autres informations sur le certificat?Comment puis-je envoyer un mot de passe avec mon certificat (X.509) dans un service WCF?

Voici une partie de la configuration XML pour le service:

<configuration> 
    <system.serviceModel> 
    <client> 
     <endpoint 
     address="***" 
     binding="basicHttpBinding" 
     bindingConfiguration="***" 
     behaviorConfiguration="HTTPSEndpoint" 
     contract="***" 
     name="***" /> 
    </client> 
    <bindings> 
     <basicHttpBinding> 
     <binding 
      name="***" 
      sendTimeout="00:05:00" 
      maxBufferSize="2147483647" 
      maxReceivedMessageSize="2147483647" > 
      <readerQuotas maxStringContentLength="2147483647" /> 
      <security mode="Transport"> 
      <transport clientCredentialType="Certificate" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name ="HTTPSEndpoint"> 
      <clientCredentials> 
      <clientCertificate 
       findValue="***" 
       storeLocation="LocalMachine" 
       storeName="My" 
       x509FindType="FindBySubjectName"/> 
      </clientCredentials> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

Répondre

3

L'obligation d'entrer un mot de passe lors de la récupération du certificat du magasin de certificats sur la machine cliente est parce que le certificat a été importé avec le " option activer la protection forte clé privée » vérifié:

Importing a certificate to the certificate store.

Ceci est souvent défini dans le cadre des processus de serveur durcissement standard. Il est destiné aux situations où le certificat authentifie un utilisateur avec un système distant alors que l'utilisateur est présent. Comme l'invite de mot de passe est due au processus d'importation du certificat et n'est pas une propriété intrinsèque des certificats, l'achat de nouveaux certificats ne changera rien.

Je ne connais aucun moyen de transmettre par programme le mot de passe au magasin de certificats lors de la récupération. Cependant, si vous y réfléchissez, même si vous réussissez, vous devrez sécuriser le mot de passe en quelque sorte. Vous pouvez chiffrer le mot de passe de votre fichier .config, mais vous devez maintenant stocker la clé de chiffrement. Et ainsi de suite ... Quelque part, il y aura un lâche qui rend inutile la «forte protection des clés privées». Fondamentalement, votre client ne peut pas avoir les deux sens: il ne peut pas "activer la protection de clé privée forte", et ne pas avoir à entrer un mot de passe chaque fois que le certificat client est requis. Beaucoup mieux qu'ils stockent le certificat correctement.

Pour un service client sans surveillance, la méthode la plus sûre pour stocker un certificat client est la suivante:

  1. Exécutez votre service client sous un compte spécifique qui a un mot de passe cryptographiquement forte.
  2. Supprimez le certificat du magasin LocalMachine. Les certificats installés dans le magasin LocalMachine sont accessibles à tous les comptes qui s'exécutent sur la machine.
  3. Installez le certificat dans le magasin CurrentUser du compte de service client. Cela signifie que le certificat est accessible uniquement au compte du service client. Lorsque le certificat est installé, assurez-vous de décocher l'option "Activer la protection de clé privée forte".