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

Um ein x. 509-Zertifikat auf der Windows Communication Foundation (WCF) zugreifen können, muss Anwendungscode Certificate Store Name und Speicherort angeben.To make an X.509 certificate accessible to 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 zugeordneten privaten Schlüssel für ein x. 509-Zertifikat in keinem Zertifikatspeicher zu erhalten, muss WCF dazu berechtigt.To obtain the private key associated with an X.509 certificate in a certificate store, WCF 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. Gewähren Sie dem Konto, das unter den WCF Lesezugriff auf die Datei ausgeführt wird, die den mit dem x. 509-Zertifikat zugeordneten privaten Schlüssel enthält.Give the account under which WCF is running read access to the file that contains the private key associated with the X.509 certificate.

    1. Bestimmen Sie, ob WCF Lesezugriff auf den privaten Schlüssel für das x. 509-Zertifikat erfordert.Determine whether WCF 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 dazu, wie Sie den Fingerabdruck eines Zertifikats zu bestimmen, finden Sie unter wie: Abrufen des Fingerabdrucks eines Zertifikats.For more information about 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. Bestimmen Sie das Konto, unter dem WCF ausgeführt wird.Determine the account that WCF is running under.

      In der folgenden Tabelle werden die Konten beschrieben unter der WCF für ein bestimmtes Szenario ausgeführt wird.The following table details the account under which WCF 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. Gewähren Sie Lesezugriff auf die Datei, die den privaten Schlüssel für das Konto, die mithilfe eines Tools wie cacls.exe WCF enthält unter läuft.Grant read access to the file that contains the private key to the account that WCF 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