Comment : rendre des certificats X.509 accessibles à WCF

Pour rendre un certificat X.509 accessible à Windows Communication Foundation (WCF), le code d'application doit spécifier le nom et l'emplacement du magasin de certificats. Dans certains cas, l'identité du processus doit avoir accès au fichier contenant la clé privée associée au certificat X.509. Pour obtenir la clé privée associée à un certificat X.509 dans un magasin de certificats, WCF doit disposer de l'autorisation requise. Par défaut, seuls le propriétaire et le compte système peuvent accéder à la clé privée d'un certificat.

Pour rendre des certificats X.509 accessibles à WCF

  1. Accordez au compte sous lequel WCF s'exécute l'accès en lecture au fichier contenant la clé privée associée au certificat X.509.

    1. Déterminez si WCF requiert l'accès en lecture à la clé privée du certificat X.509.

      Le tableau suivant précise si une clé privée doit être disponible lors de l'utilisation d'un certificat X.509.

      Utilisation d'un certificat X.509 Clé privée

      Signature numérique d'un message SOAP sortant.

      Oui

      Vérification de la signature d'un message SOAP entrant.

      Non

      Chiffrement d'un message SOAP sortant.

      Non

      Déchiffrement d'un message SOAP entrant.

      Oui

    2. Déterminez l'emplacement et le nom du magasin de certificats dans lequel le certificat est stocké.

      Le magasin de certificats dans lequel le certificat est stocké est spécifié dans le code d'application ou dans la configuration. Ainsi, l'exemple suivant spécifie que le certificat se trouve dans le magasin de certificats CurrentUser nommé My.

      cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com")
      
      cc.ClientCredentials.ClientCertificate.SetCertificate(
          StoreLocation.CurrentUser,
          StoreName.My,
          X509FindType.FindBySubjectName,
          "contoso.com");
      
    3. Déterminez l'emplacement de la clé privée du certificat sur l'ordinateur à l'aide de l'outil FindPrivateKey.

      L'outil FindPrivateKey requiert le nom et l'emplacement du magasin de certificats, et un élément qui identifie le certificat de façon unique. Il accepte le nom de sujet du certificat ou son empreinte numérique comme identificateur unique. Pour plus d'informations sur le sujet suivant la manière de déterminer l'empreinte numérique d'un certificat, consultez Comment : récupérer l'empreinte numérique d'un certificat.

      L'exemple de code suivant utilise l'outil FindPrivateKey pour déterminer l'emplacement de la clé privée d'un certificat dans le magasin My dans CurrentUser avec une empreinte numérique de 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d.

      findprivatekey.exe My CurrentUser -t "46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d" -a
      
    4. Déterminez le compte sous lequel WCF s'exécute.

      Le tableau suivant précise le compte sous lequel WCF s'exécute pour un scénario donné.

      Scénario Identité du processus

      Client (console ou application WinForms).

      Utilisateur actuellement connecté.

      Service auto-hébergé.

      Utilisateur actuellement connecté.

      Service hébergé dans IIS 6.0 (Windows Server 2003) ou IIS 7.0 (Windows Vista).

      SERVICE RÉSEAU

      Service hébergé dans IIS 5.X (Windows XP).

      Contrôlé par l'élément <processModel> dans le fichier Machine.config. Le compte par défaut est ASPNET.

    5. Accordez l'accès en lecture au fichier contenant la clé privée du compte sous lequel WCF s'exécute, à l'aide d'un outil tel que cacls.exe.

      L'exemple de code suivant modifie (/E) la liste de contrôle d'accès (ACL) du fichier spécifié pour accorder (/G) au compte SERVICE RÉSEAU l'accès en lecture (: R) au fichier.

      cacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /E /G "NETWORK SERVICE":R
      

Voir aussi

Tâches

FindPrivateKey
Comment : récupérer l'empreinte numérique d'un certificat

Concepts

Utilisation des certificats