FindPrivateKey-exempel
Det kan vara svårt att hitta platsen och namnet på den privata nyckelfilen som är associerad med ett specifikt X.509-certifikat i certifikatarkivet. Verktyget FindPrivateKey.exe underlättar den här processen.
Viktigt!
Du måste skapa FindPrivateKey-exemplet innan du använder det.
X.509-certifikat installeras av en administratör eller någon användare på datorn. Certifikatet kan dock kommas åt av en tjänst som körs under ett annat konto. Till exempel NETWORK SERVICE-kontot.
Det här kontot kanske inte har åtkomst till den privata nyckelfilen eftersom certifikatet inte installerades av det ursprungligen. Verktyget FindPrivateKey ger dig platsen för ett visst X.509-certifikats privata nyckelfil. Du kan lägga till behörigheter eller ta bort behörigheter i den här filen när du känner till platsen för de specifika X.509-certifikatens privata nyckelfil.
Exemplen som använder certifikat för säkerhet använder verktyget FindPrivateKey i filen Setup.bat . När den privata nyckelfilen har hittats kan du använda andra verktyg, till exempel Cacls.exe för att ange lämpliga åtkomsträttigheter till filen.
När du kör en WCF-tjänst (Windows Communication Foundation) under ett användarkonto, till exempel en körbar fil med egen värd, kontrollerar du att användarkontot har skrivskyddad åtkomst till filen. När du kör en WCF-tjänst under Internet Information Services (IIS) är standardkontona som tjänsten körs under nätverkstjänsten på IIS 7 och tidigare versioner eller programpoolsidentitet på IIS 7.5 och senare versioner. Mer information finns i Programpoolsidentiteter.
Läsbehörigheter
När du kommer åt ett certifikat som processen inte har läsbehörighet för visas ett undantagsmeddelande som liknar följande exempel:
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"
När detta inträffar använder du verktyget FindPrivateKey för att hitta filen med den privata nyckeln och anger sedan åtkomsträtt för den process som tjänsten körs under. Detta kan till exempel göras med verktyget Cacls.exe enligt följande exempel:
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
Konventioner – kommandoradsposter
"[alternativ]" representerar en valfri uppsättning parametrar.
{option} representerar en obligatorisk uppsättning parametrar.
"option1 | option2" representerar ett val mellan uppsättningar med alternativ.
"<value>" representerar ett parametervärde som ska anges.
Användning
FindPrivateKey <storeName> <storeLocation> [{ {-n <subjectName>} | {-t <thumbprint>} } [-f | -d | -a]]
Där:
Parameter | Description |
---|---|
<subjectName> |
Certifikatets ämnesnamn |
<thumbprint> |
Tumavtrycket för certifikatet (Du kan använda verktyget Certmgr.exe för att hitta det här) |
-f |
endast utdatafilnamn |
-d |
endast utdatakatalog |
-a |
utdata absolut filnamn |
Om inga parametrar anges i kommandotolken visas hjälptexten med den här informationen.
Exempel
Det här exemplet hittar certifikatets filnamn med ämnesnamnet "CN=localhost" i det personliga arkivet för den aktuella användaren.
FindPrivateKey My CurrentUser -n "CN=localhost"
I det här exemplet hittar du filnamnet för certifikatet med ämnesnamnet "CN=localhost" i det personliga arkivet för den aktuella användaren och matar ut den fullständiga katalogsökvägen.
FindPrivateKey My CurrentUser -n "CN=localhost" -a
Det här exemplet hittar certifikatets filnamn med tumavtrycket "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52", i den lokala datorns personliga arkiv.
FindPrivateKey My LocalMachine -t "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52"