Voorbeeld FindPrivateKey
Het kan lastig zijn om de locatie en naam te vinden van het persoonlijke-sleutelbestand dat is gekoppeld aan een specifiek X.509-certificaat in het certificaatarchief. Het hulpprogramma FindPrivateKey.exe faciliteert dit proces.
Belangrijk
U moet het FindPrivateKey-voorbeeld bouwen voordat u het gaat gebruiken.
X.509-certificaten worden geïnstalleerd door een Beheer istrator of een gebruiker op de computer. Het certificaat kan echter worden geopend door een service die wordt uitgevoerd onder een ander account. Bijvoorbeeld het NETWORK SERVICE-account.
Dit account heeft mogelijk geen toegang tot het persoonlijke-sleutelbestand omdat het certificaat oorspronkelijk niet is geïnstalleerd. Het hulpprogramma FindPrivateKey geeft u de locatie van een bepaald X.509-certificaatbestand met persoonlijke sleutels. U kunt machtigingen toevoegen of machtigingen voor dit bestand verwijderen zodra u de locatie van het persoonlijke sleutelbestand van de specifieke X.509-certificaten kent.
De voorbeelden die gebruikmaken van certificaten voor beveiliging, gebruiken het hulpprogramma FindPrivateKey in het Setup.bat-bestand . Zodra het bestand met de persoonlijke sleutel is gevonden, kunt u andere hulpprogramma's zoals Cacls.exe gebruiken om de juiste toegangsrechten in te stellen op het bestand.
Wanneer u een WCF-service (Windows Communication Foundation) uitvoert onder een gebruikersaccount, zoals een zelf-hostend uitvoerbaar bestand, moet u ervoor zorgen dat het gebruikersaccount alleen-lezentoegang heeft tot het bestand. Bij het uitvoeren van een WCF-service onder IIS (Internet Information Services) zijn de standaardaccounts waaronder de service wordt uitgevoerd de NETWORK SERVICE op IIS 7 en eerdere versies, of de identiteit van de groep van toepassingen op IIS 7.5 en latere versies. Zie Identiteiten van toepassingsgroepen voor meer informatie.
Leesbevoegdheden
Wanneer u toegang krijgt tot een certificaat waarvoor het proces geen leesbevoegdheden heeft, ziet u een uitzonderingsbericht dat lijkt op het volgende voorbeeld:
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"
Wanneer dit gebeurt, gebruikt u het hulpprogramma FindPrivateKey om het bestand met de persoonlijke sleutel te vinden en stelt u vervolgens het toegangsrecht in voor het proces waarvoor de service wordt uitgevoerd. Dit kan bijvoorbeeld worden gedaan met het hulpprogramma Cacls.exe, zoals wordt weergegeven in het volgende voorbeeld:
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
Conventies: opdrachtregelvermeldingen
[option]' vertegenwoordigt een optionele set parameters.
{option} vertegenwoordigt een verplichte set parameters.
"option1 | option2" vertegenwoordigt een keuze tussen sets met opties.
'<waarde>' vertegenwoordigt een parameterwaarde die moet worden ingevoerd.
Gebruik
FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]
Hierin:
Parameter | Description |
---|---|
<subjectName> |
De onderwerpnaam van het certificaat |
<thumbprint> |
De vingerafdruk van het certificaat (u kunt het hulpprogramma Certmgr.exe gebruiken om dit te vinden) |
-f |
Alleen uitvoerbestandsnaam |
-d |
alleen uitvoermap |
-a |
uitvoer absolute bestandsnaam |
Als er geen parameters zijn opgegeven bij de opdrachtprompt, wordt help-tekst met deze informatie weergegeven.
Voorbeelden
In dit voorbeeld wordt de bestandsnaam van het certificaat gevonden met de onderwerpnaam CN=localhost, in het persoonlijke archief van de huidige gebruiker.
FindPrivateKey My CurrentUser -n "CN=localhost"
In dit voorbeeld vindt u de bestandsnaam van het certificaat met de onderwerpnaam CN=localhost, in het persoonlijke archief van de huidige gebruiker en voert u het volledige mappad uit.
FindPrivateKey My CurrentUser -n "CN=localhost" -a
In dit voorbeeld wordt de bestandsnaam van het certificaat gevonden met een vingerafdruk van '03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52', in het persoonlijke archief van de lokale computer.
FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"