Partager via


Exemple FindPrivateKey

Il peut être difficile de rechercher l'emplacement et le nom du fichier de clé privée associé à un certificat X.509 spécifique dans le magasin de certificats. L'outil FindPrivateKey.exe facilite ce processus.

Important

Vous devez générer l’exemple FindPrivateKey avant de l’utiliser.

Les certificats X.509 sont installés par un administrateur ou tout utilisateur sur l'ordinateur. Toutefois, le certificat est accessible par un service exécuté sous un autre compte. Par exemple, le compte SERVICE RÉSEAU.

Ce compte peut ne pas avoir accès au fichier de clé privée parce qu'il n'a pas installé le certificat à l'origine. L'outil FindPrivateKey vous donne l'emplacement du fichier de clé privée d'un certificat X.509 donné. Vous pouvez ajouter ou supprimer des autorisations à ce fichier une fois que vous connaissez l'emplacement du fichier de clé privée des certificats X.509 particuliers.

Les exemples qui utilisent des certificats de sécurité utilisent l’outil FindPrivateKey dans le fichier Setup.bat. Une fois que le fichier de clé privée a été trouvé, vous pouvez utiliser d’autres outils comme Cacls.exe pour définir les droits d'accès appropriés sur le fichier.

Si vous exécutez un service Windows Communication Foundation (WCF) sous un compte d’utilisateur, par exemple un exécutable auto-hébergé, vérifiez que le compte d’utilisateur dispose d’un accès en lecture seule au fichier. Si vous exécutez un service WCF sous Internet Information Services (IIS), le service s’exécute sous les comptes par défaut SERVICE RÉSEAU sur IIS 7 et versions antérieures, ou Identité du pool d’applications sur IIS 7.5 et versions ultérieures. Pour plus d'informations, consultez Identités du pool d’applications.

Privilèges de lecture

Lorsque vous accédez à un certificat pour lequel le processus n'a pas de privilège d'accès en lecture, vous voyez un message d'exception semblable à l'exemple suivant :

System.ArgumentException was unhandled
Message="The certificate 'CN=localhost' must have a private key that is capable of key exchange. The process must have access rights for the private key."
Source="System.ServiceModel"

Quand cela se produit, utilisez l'outil FindPrivateKey afin de rechercher le fichier de clé privée, puis définissez le droit d'accès pour le processus sous lequel le service s'exécute. Cela peut être fait avec l'outil Cacls.exe, comme le montre l'exemple suivant :

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

Conventions - Entrées de lignes de commande

« [option] » représente un jeu facultatif de paramètres.

« {option} » représente un jeu obligatoire de paramètres.

« option1 | option2 » représente un choix entre plusieurs jeux d'options.

« <value> » représente une valeur de paramètre à entrer.

Usage

FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]

Où :

Paramètre Description
<subjectName> Nom d’objet du certificat
<thumbprint> Empreinte numérique du certificat (vous pouvez utiliser l’outil Certmgr.exe pour la trouver)
-f nom du fichier de sortie uniquement
-d répertoire de sortie uniquement
-a nom de fichier absolu de sortie

Si aucun paramètre n'est spécifié à l'invite de commandes, le texte d'aide avec cette informations s'affiche.

Exemples

Cet exemple recherche le nom de fichier du certificat dont le nom d’objet est « CN=localhost » dans le magasin personnel de l’utilisateur actuel.

FindPrivateKey My CurrentUser -n "CN=localhost"

Cet exemple recherche le nom de fichier du certificat dont le nom d’objet est « CN=localhost » dans le magasin personnel de l’utilisateur actuel et pour sortie le chemin complet du répertoire.

FindPrivateKey My CurrentUser -n "CN=localhost" -a

Cet exemple recherche le nom de fichier du certificat avec l'empreinte numérique « 03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52 » dans le magasin personnel de l'ordinateur local.

FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"