FindPrivateKey-Beispiel

Es kann schwierig sein, den Speicherort und Namen der Privatschlüsseldatei zu finden, die einem bestimmten X.509-Zertifikat im Zertifikatspeicher zugeordnet ist. Das Tool FindPrivateKey.exe erleichtert diesen Prozess.

Wichtig

Sie müssen das FindPrivateKey-Beispiel erstellen, bevor Sie es verwenden.

X.509-Zertifikate werden von einem Administrator oder einem beliebigen Benutzer auf dem Computer installiert. Auf das Zertifikat kann jedoch von einem Dienst zugegriffen werden, der unter einem anderen Konto ausgeführt wird. Beispiel: das NETWORK SERVICE-Konto.

Dieses Konto verfügt möglicherweise nicht über Zugriff auf die Privatschlüsseldatei, da das Zertifikat nicht ursprünglich von diesem Konto installiert wurde. Das Tool FindPrivateKey gibt den Speicherort der Privatschlüsseldatei eines X.509-Zertifikats an. Sie können Berechtigungen in dieser Datei hinzufügen oder entfernen, wenn Sie den Speicherort der Privatschlüsseldatei der jeweiligen X.509-Zertifikate kennen.

In den Beispielen, in denen Zertifikate für die Sicherheit verwendet werden, wird das Tool FindPrivateKey in der Datei Setup.bat verwendet. Wenn die Privatschlüsseldatei gefunden wurde, können Sie mit anderen Tools wie Cacls.exe die entsprechenden Zugriffsrechte für die Datei festlegen.

Stellen Sie beim Ausführen eines Windows Communication Foundation (WCF)-Diensts unter einem Benutzerkonto, z. B. einer selbst gehosteten ausführbaren Datei, sicher, dass das Benutzerkonto schreibgeschützten Zugriff auf die Datei hat. Beim Ausführen eines WCF-Diensts unter Internetinformationsdienste (IIS) sind die Standardkonten, unter denen der Dienst ausgeführt wird, der NETZWERKDIENST in IIS 7 und früheren Versionen oder Anwendungspoolidentität in IIS 7.5 und höheren Versionen. Weitere Informationen finden Sie unter Application Pool Identities.

Leseberechtigungen

Beim Zugreifen auf ein Zertifikat, für das der Prozess über keine Leseberechtigung verfügt, wird eine Ausnahmemeldung angezeigt, ähnlich wie im folgenden Beispiel.

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"

Wenn dies auftritt, suchen Sie mithilfe des Tools FindPrivateKey die Privatschlüsseldatei, und legen Sie dann die Zugriffsberechtigung für den Prozess fest, unter dem der Dienst ausgeführt wird. Dies kann beispielsweise mit dem Tool Cacls.exe erfolgen, wie im folgenden Beispiel dargestellt:

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

Konventionen—Befehlszeileneinträge

„[Option]“ stellt einen optionalen Satz von Parametern dar.

„[Option]“ stellt einen obligatorischen Satz von Parametern dar.

Option1 | Option2“ stellt eine Auswahl zwischen zwei Optionssätzen dar.

„<Wert>“ stellt einen einzugebenden Parameterwert dar.

Verwendung

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

Hierbei gilt:

Parameter Beschreibung
<subjectName> Der Betreffname des Zertifikats
<thumbprint> Der Fingerabdruck des Zertifikats (Sie können das Certmgr.exe Tool verwenden, um dies zu finden)
-f Nur Ausgabedateiname
-d Nur Ausgabeverzeichnis
-a Absoluter Ausgabedateiname

Wenn an der Eingabeaufforderung keine Parameter angegeben werden, wird Hilfetext mit diesen Informationen angezeigt.

Beispiele

In diesem Beispiel wird der Dateiname des Zertifikats mit dem Betreffnamen „CN=localhost“ im persönlichen Speicher des aktuellen Benutzers gefunden.

FindPrivateKey My CurrentUser -n "CN=localhost"

In diesem Beispiel wird der Dateiname des Zertifikats mit dem Betreffnamen „CN=localhost“ im persönlichen Speicher des aktuellen Benutzers gesucht und der vollständige Verzeichnispfad ausgegeben.

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

In diesem Beispiel wird der Dateiname des Zertifikats mit dem Fingerabdruck "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52" im persönlichen Speicher des lokalen Computers gesucht.

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