FindPrivateKey-BeispielFindPrivateKey sample

Es kann schwierig sein, den Speicherort und Namen der Privatschlüsseldatei zu finden, die einem bestimmten X.509-Zertifikat im Zertifikatspeicher zugeordnet ist.It can be difficult to find the location and name of the private key file associated with a specific X.509 certificate in the certificate store. Das Tool FindPrivateKey.exe erleichtert diesen Prozess.The FindPrivateKey.exe tool facilitates this process.

Wichtig

FindPrivateKey ist ein Beispiel, das vor der Verwendung kompiliert werden muss.FindPrivateKey is a sample that needs to be compiled prior to use. Finden Sie unter der das FindPrivateKey-Projekt erstellen Abschnitt, um Anweisungen zum Erstellen Sie das FindPrivateKey-Tool.See the To build the FindPrivateKey project section for instructions on how to build the FindPrivateKey tool.

X.509-Zertifikate werden von einem Administrator oder einem beliebigen Benutzer auf dem Computer installiert.X.509 certificates are installed by an Administrator or any user in the machine. Allerdings kann das Zertifikat von einem Dienst unter einem anderen Konto ausführen zugegriffen werden.However, the certificate may be accessed by a service running under a different account. Z. B. das NETZWERKDIENST-Konto.For example, the NETWORK SERVICE account.

Dieses Konto verfügt möglicherweise nicht über Zugriff auf die Privatschlüsseldatei, da das Zertifikat nicht ursprünglich von diesem Konto installiert wurde.This account may not have access to the private key file because the certificate was not installed by it originally. Das Tool FindPrivateKey gibt den Speicherort der Privatschlüsseldatei eines X.509-Zertifikats an.The FindPrivateKey tool gives you the location of a given X.509 Certificate's private key file. Sie können Berechtigungen in dieser Datei hinzufügen oder entfernen, wenn Sie den Speicherort der Privatschlüsseldatei der jeweiligen X.509-Zertifikate kennen.You can add permissions or remove permissions to this file once you know the location of the particular X.509 certificates' private key file.

Die Beispiele, die Zertifikate für die Sicherheit verwenden verwenden das Tool FindPrivateKey in der "Setup.bat" Datei.The samples that use certificates for security use the FindPrivateKey tool in the Setup.bat file. Wenn die Privatschlüsseldatei gefunden wurde, können Sie andere Tools wie z. B. Cacls.exe die richtigen Zugriffsrechte auf die Datei festgelegt.Once the private key file has been found, you can use other tools such as Cacls.exe to set the appropriate access rights onto the file.

Stellen Sie sicher, dass das Benutzerkonto, das nur-Lese Zugriff auf die Datei hat, wenn ein Windows Communication Foundation (WCF)-Dienst unter einem Benutzerkonto, z. B. einen selbst gehosteten ausführbaren Datei ausgeführt.When running a Windows Communication Foundation (WCF) service under a user account, such as a self-hosted executable, ensure that the user account has read-only access to the file. Beim Ausführen eines WCF-Diensts unter Internet Information Services (IIS) sind die Standardkonten, denen der Dienst ausgeführt, klicken Sie unter wird NETWORK SERVICE unter IIS 7 und frühere Versionen oder die Identität des Anwendungspools in IIS 7.5 und höhere Versionen.When running a WCF service under Internet Information Services (IIS) the default accounts that the service runs under are the NETWORK SERVICE on IIS 7 and earlier versions, or Application Pool Identity on IIS 7.5 and later versions. Weitere Informationen finden Sie unter Anwendungspoolidentitäten.For more information, see Application Pool Identities.

BeispieleExamples

Beim Zugreifen auf ein Zertifikat für die der Prozess Leseberechtigung besitzt eine Ausnahmemeldung ähnlich wie im folgenden Beispiel angezeigt:When accessing a certificate for which the process doesn't have read privilege, you see an exception message similar to the following example:

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"

In diesem Fall verwenden Sie das Tool FindPrivateKey die Privatschlüsseldatei gefunden, und legen Sie dann die Zugriffsberechtigung für den Prozess, unter der Dienst ausgeführt wird.When this occurs, use the FindPrivateKey tool to find the private key file, and then set the access right for the process that the service is running under. Beispielsweise kann dies mit dem Tool Cacls.exe erfolgen wie im folgenden Beispiel gezeigt:For example, this can be done with the Cacls.exe tool as shown in the following example:

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

So erstellen Sie das FindPrivateKey-ProjektTo build the FindPrivateKey project

Um das Projekt herunterzuladen, besuchen Sie Windows Communication Foundation (WCF) und Windows Workflow Foundation (WF) Samples for .NET Framework 4.To download the project, visit Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4.

  1. Open Datei-ExplorerFile Explorer und navigieren Sie zu der WF_WCF_Samples\WCF\Setup\FindPrivateKey\CS Ordner unterhalb des Verzeichnisses, in dem Sie das Beispiel installiert haben.Open Datei-ExplorerFile Explorer and navigate to the WF_WCF_Samples\WCF\Setup\FindPrivateKey\CS folder under the directory location where you installed the sample.

  2. Doppelklicken Sie auf das Symbol für die SLN-Datei, um diese in Visual Studio zu öffnen.Double-click the .sln file icon to open the file in Visual Studio.

  3. In der erstellen klicken Sie im Menü Projektmappe neu erstellen.In the Build menu, select Rebuild Solution.

  4. Beim Erstellen der Projektmappe wird die Datei "FindPrivateKey.exe" erstellt.Building the solution generates the file: FindPrivateKey.exe.

Konventionen: befehlszeileneinträgeConventions—Command-Line entries

"[Option]" stellt einen optionalen Satz von Parametern dar."[option]" represents an optional set of parameters.

"{Option}" stellt einen obligatorischen Satz von Parametern dar."{option}" represents a mandatory set of parameters.

"option1 | option2" stellt eine Auswahl zwischen Sätzen von Optionen dar."option1 | option2" represents a choice between sets of options.

"<Wert>" stellt einen Parameterwert eingegeben werden."<value>" represents a parameter value to be entered.

VerwendungUsage

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

Ort:Where:

       <subjectName> The subject name of the certificate
       <thumbprint>  The thumbprint of the certificate (You can use the Certmgr.exe tool to find this)
       -f            output file name only
       -d            output directory only
       -a            output absolute file name

Wenn keine Parameter an der Eingabeaufforderung angegeben werden, wird dieser Hilfetext angezeigt.If no parameters are specified at the command prompt, then this help text is displayed.

BeispieleExamples

In diesem Beispiel wird der Dateiname des Zertifikats mit dem Antragstellernamen "CN = Localhost", in den persönlichen Speicher des aktuellen Benutzers.This example finds the filename of the certificate with a subject name of "CN=localhost", in the Personal store of the Current User.

FindPrivateKey My CurrentUser -n "CN=localhost"

In diesem Beispiel wird der Dateiname des Zertifikats mit dem Antragstellernamen "CN = Localhost" im persönlichen Speicher des aktuellen Benutzers und der vollständige Verzeichnispfad ausgegeben.This example finds the filename of the certificate with a subject name of "CN=localhost", in the Personal store of the Current User and output the full directory path.

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.This example finds the filename of the certificate with a thumbprint of "03 33 98 63 d0 47 e7 48 71 33 62 64 76 5c 4c 9d 42 1d 6b 52", in the Personal store of the Local 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"