Partager via


Procédure : rendre des certificats X.509 accessibles à WCF

Pour rendre un certificat X.509 accessible à Windows Communication Foundation (WCF), le code de l’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 un accès en lecture au fichier qui contient la clé privée associée au certificat X.509.

    1. Déterminez si WCF exige un 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, ainsi qu’un élément permettant d’identifier le certificat de façon unique. Il accepte le nom de sujet du certificat ou son empreinte numérique comme identificateur unique. Pour savoir comment déterminer l’empreinte d’un certificat, consultez Guide pratique : Récupérer l’empreinte 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 de CurrentUser avec une empreinte 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. Identifiez 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 qui contient la clé privée du compte sous lequel WCF s’exécute, à l’aide d’un outil tel qu’icacls.exe.

      L’exemple de code suivant modifie la liste de contrôle d’accès discrétionnaire (DACL) du fichier spécifié pour accorder au compte SERVICE RÉSEAU l’accès en lecture (:R) au fichier.

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

Voir aussi