Partager via


Exemple de code FindPrivateKey

Il peut être difficile de trouver 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.

Importante

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

Les certificats X.509 sont installés par un administrateur ou un utilisateur de l’ordinateur. Toutefois, le certificat est accessible par un service exécuté sous un autre compte. Par exemple, le compte NETWORK SERVICE.

Ce compte n’a peut-être pas accès au fichier de clé privée, car le certificat n’a pas été installé à l’origine. L’outil FindPrivateKey vous donne l’emplacement d’un fichier de clé privée X.509 donné du certificat. Vous pouvez ajouter des autorisations ou supprimer des autorisations à ce fichier une fois que vous connaissez l’emplacement du fichier de clé privée des certificats X.509 particulier.

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

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

Privilèges de lecture

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

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"

Lorsque cela se produit, utilisez l’outil FindPrivateKey pour 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. Par exemple, cela peut être effectué avec l’outil Cacls.exe, comme illustré dans 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 ensemble facultatif de paramètres.

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

« option1 | option2 » représente un choix entre les ensembles d’options.

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

Utilisation

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

Où :

Paramètre Descriptif
<subjectName> Nom de l’objet du certificat
<thumbprint> Empreinte numérique du certificat (vous pouvez utiliser l’outil Certmgr.exe pour le 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 contenant ces informations s’affiche.

Exemples

Cet exemple recherche le nom de fichier du certificat avec un nom d’objet « 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 avec un nom d’objet « CN=localhost », dans le magasin personnel de l’utilisateur actuel et génère le chemin d’accès 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"