Vorgehensweise: Zugänglichmachen von X.509-Zertifikaten für WCFHow to: Make X.509 Certificates Accessible to WCF

Damit ein X.509-Zertifikat für Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) zugänglich ist, muss der Name und der Speicherort des Zertifikats im Anwendungscode angegeben werden.To make an X.509 certificate accessible to Windows Communication Foundation (WCF)Windows Communication Foundation (WCF), application code must specify the certificate store name and location. In bestimmten Fällen benötigt die Prozessidentität Zugriff auf die Datei, die den zugeordneten privaten Schlüssel für das X.509-Zertifikat enthält.In certain circumstances, the process identity must have access to the file that contains the private key associated with the X.509 certificate. Um den privaten Schlüssel zu erhalten, der einem X.509-Zertifikat in einem Zertifikatspeicher zugeordnet ist, benötigt WCFWCF die entsprechenden Berechtigungen.To obtain the private key associated with an X.509 certificate in a certificate store, WCFWCF must have permission to do so. Standardmäßig können nur der Besitzer und das Systemkonto auf den privaten Schlüssel eines Zertifikats zugreifen.By default, only the owner and the System account can access the private key of a certificate.

So machen Sie X.509-Zertifikate für WCF zugänglichTo make X.509 certificates accessible to WCF

  1. Erteilen Sie dem Konto, unter dem WCFWCF ausgeführt wird, Schreibzugriff auf die Datei, die den zugeordneten privaten Schlüssel für das X.509-Zertifikat enthält.Give the account under which WCFWCF is running read access to the file that contains the private key associated with the X.509 certificate.

    1. Ermitteln Sie, ob WCFWCF Lesezugriff auf den privaten Schlüssel für das X.509-Zertifikat benötigt.Determine whether WCFWCF requires read access to the private key for the X.509 certificate.

      Die folgende Tabelle beschreibt, ob ein privater Schlüssel bei der Verwendung eines X.509-Zertifikats verfügbar sein muss.The following table details whether a private key must be available when using an X.509 certificate.

      Verwendung des X.509-ZertifikatsX.509 certificate use Privater SchlüsselPrivate key
      Digitales Signieren einer ausgehenden SOAP-Nachricht.Digitally signing an outbound SOAP message. JaYes
      Überprüfen der Signatur einer eingehenden SOAP-Nachricht.Verifying the signature of an inbound SOAP message. NeinNo
      Verschlüsseln einer ausgehenden SOAP-Nachricht.Encrypting an outbound SOAP message. NeinNo
      Verschlüsseln einer eingehenden SOAP-Nachricht.Decrypting an inbound SOAP message. JaYes
    2. Ermitteln Sie den Ort und Namen des Zertifikatspeicherspeichers, in dem sich das Zertifikat befindet.Determine the certificate store location and name in which the certificate is stored.

      Der Zertifikatspeicher, in dem das Zertifikat gespeichert ist, wird entweder im Anwendungscode oder in einer Konfiguration angegeben.The certificate store in which the certificate is stored is specified either in application code or in configuration. Im folgenden Beispiel wird angegeben, dass sich das Zertifikat im CurrentUser-Zertifikatsspeicher mit dem Namen My befindet.For example, the following example specifies that the certificate is located in the CurrentUser certificate store named My.

      cc.ClientCredentials.ClientCertificate.SetCertificate(
          StoreLocation.CurrentUser,
          StoreName.My,
          X509FindType.FindBySubjectName,
          "contoso.com");
      
      cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "contoso.com")
      
    3. Bestimmen, in dem der private Schlüssel für das Zertifikat auf dem Computer gefunden wurde die FindPrivateKey Tool.Determine where the private key for the certificate is located on the computer by using the FindPrivateKey tool.

      Die FindPrivateKey Tool erfordert, dass der Zertifikatspeichername, zertifikatspeicherort und etwas, das das Zertifikat eindeutig identifiziert.The FindPrivateKey tool requires the certificate store name, certificate store location, and something that uniquely identifies the certificate. Als eindeutiger Bezeichner werden der Antragstellername oder der Fingerabdruck des Zertifikats von dem Tool akzeptiert.The tool accepts either the certificate's subject name or its thumbprint as a unique identifier. Weitere Informationen finden Sie unterFor more information aboutzum Bestimmen des Fingerabdrucks eines Zertifikats finden Sie unter wie: Abrufen des Fingerabdrucks eines Zertifikats. how to determine the thumbprint for a certificate, see How to: Retrieve the Thumbprint of a Certificate.

      Im folgenden Codebeispiel wird mit der FindPrivateKey Tool, um zu bestimmen, den Speicherort des privaten Schlüssels eines Zertifikats in die My speichern in CurrentUser mit dem Fingerabdruck 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d.The following code example uses the FindPrivateKey tool to determine the location of the private key for a certificate in the My store in CurrentUser with a thumbprint of 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d.

      findprivatekey.exe My CurrentUser -t "46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d" -a  
      
    4. Ermitteln Sie das Konto, unter dem WCFWCF ausgeführt wird.Determine the account that WCFWCF is running under.

      In der folgenden Tabelle werden die Konten beschrieben, unter denen WCFWCF in einem bestimmten Szenario ausgeführt wird.The following table details the account under which WCFWCF is running for a given scenario.

      SzenarioScenario ProzessidentitätProcess identity
      Client (Konsole oder WinForms-Anwendung)Client (console or WinForms application). Aktuell angemeldeter BenutzerCurrently logged in user.
      Selbst gehosteter DienstService that is self-hosted. Aktuell angemeldeter BenutzerCurrently logged in user.
      Dienst, der in IIS 6.0 (Windows Server 2003Windows Server 2003) oder IIS 7.0 (Windows VistaWindows Vista) gehostet wird.Service that is hosted in IIS 6.0 (Windows Server 2003Windows Server 2003) or IIS 7.0 (Windows VistaWindows Vista). NETZWERKDIENSTNETWORK SERVICE
      Dienst, der in IIS 5.X (Windows XPWindows XP) gehostet wird.Service that is hosted in IIS 5.X (Windows XPWindows XP). Wird durch das <processModel>-Element in der Datei Machine.config gesteuert.Controlled by the <processModel> element in the Machine.config file. ASPNET ist das Standardkonto.The default account is ASPNET.
    5. Erteilen Sie der Datei, die den privaten Schlüssel für das Konto enthält, unter dem WCFWCF ausgeführt wird, mithilfe eines Tools wie cacls.exe Lesezugriff.Grant read access to the file that contains the private key to the account that WCFWCF is running under, using a tool such as cacls.exe.

      Im folgenden Codebeispiel wird die Zugriffssteuerungsliste (/E) für die angegebene Datei bearbeitet, um (/G), dem NETZWERKDIENST-Konto, Lesezugriff (:R) auf die Datei zu erteilen.The following code example edits (/E) the access control list (ACL) for the specified file to grant (/G) the NETWORK SERVICE account read (:R) access to the file.

      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  
      

Siehe auchSee Also

FindPrivateKeyFindPrivateKey
Vorgehensweise: Abrufen des Fingerabdrucks eines ZertifikatsHow to: Retrieve the Thumbprint of a Certificate
Arbeiten mit ZertifikatenWorking with Certificates