Freigeben über


Vorgehensweise: Zugänglichmachen von X.509-Zertifikaten für WCF

Damit ein X.509-Zertifikat für Windows Communication Foundation (WCF) zugänglich ist, muss der Name und der Speicherort des Zertifikats im Anwendungscode angegeben werden. 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. Um den privaten Schlüssel zu erhalten, der einem X.509-Zertifikat in einem Zertifikatspeicher zugeordnet ist, benötigt WCF die entsprechenden Berechtigungen. Standardmäßig können nur der Besitzer und das Systemkonto auf den privaten Schlüssel eines Zertifikats zugreifen.

So machen Sie X.509-Zertifikate für WCF zugänglich

  1. Erteilen Sie dem Konto, unter dem WCF ausgeführt wird, Schreibzugriff auf die Datei, die den zugeordneten privaten Schlüssel für das X.509-Zertifikat enthält.

    1. Ermitteln Sie, ob WCF Lesezugriff auf den privaten Schlüssel für das X.509-Zertifikat benötigt.

      Die folgende Tabelle beschreibt, ob ein privater Schlüssel bei der Verwendung eines X.509-Zertifikats verfügbar sein muss.

      Verwendung des X.509-Zertifikats Privater Schlüssel

      Digitales Signieren einer ausgehenden SOAP-Nachricht.

      Ja

      Überprüfen der Signatur einer eingehenden SOAP-Nachricht.

      Nein

      Verschlüsseln einer ausgehenden SOAP-Nachricht.

      Nein

      Verschlüsseln einer eingehenden SOAP-Nachricht.

      Ja

    2. Ermitteln Sie den Ort und Namen des Zertifikatspeicherspeichers, in dem sich das Zertifikat befindet.

      Der Zertifikatspeicher, in dem das Zertifikat gespeichert ist, wird entweder im Anwendungscode oder in einer Konfiguration angegeben. Im folgenden Beispiel wird angegeben, dass sich das Zertifikat im CurrentUser-Zertifikatsspeicher mit dem Namen My befindet.

      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. Ermitteln Sie, wo sich der private Schlüssel für das Zertifikat auf dem Computer befindet. Verwenden Sie dazu das Tool FindPrivateKey.

      Für das Tool FindPrivateKey wird der Name und der Ort des Zertifikatsspeichers und eine Angabe benötigt, die das Zertifikat eindeutig identifiziert. Als eindeutiger Bezeichner werden der Antragstellername oder der Fingerabdruck des Zertifikats von dem Tool akzeptiert. Weitere Informationen über zur Vorgehensweise zum Ermitteln des Fingerabdrucks für ein Zertifikat finden Sie unter Vorgehensweise: Abrufen des Fingerabdrucks eines Zertifikats.

      Im folgenden Codebeispiel wird mithilfe des Tools FindPrivateKey der Speicherort des privaten Schlüssels für ein Zertifikat im Speicher My in CurrentUser mit einem Fingerabdruck 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9d ermittelt.

      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 WCF ausgeführt wird.

      In der folgenden Tabelle werden die Konten beschrieben, unter denen WCF in einem bestimmten Szenario ausgeführt wird.

      Szenario Prozessidentität

      Client (Konsole oder WinForms-Anwendung)

      Aktuell angemeldeter Benutzer

      Selbst gehosteter Dienst

      Aktuell angemeldeter Benutzer

      Dienst, der in IIS 6.0 (Windows Server 2003) oder IIS 7.0 (Windows Vista) gehostet wird.

      NETZWERKDIENST

      Dienst, der in IIS 5.X (Windows XP) gehostet wird.

      Wird durch das <processModel>-Element in der Datei Machine.config gesteuert. ASPNET ist das Standardkonto.

    5. Erteilen Sie der Datei, die den privaten Schlüssel für das Konto enthält, unter dem WCF ausgeführt wird, mithilfe eines Tools wie cacls.exe Lesezugriff.

      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.

      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 auch

Aufgaben

FindPrivateKey
Vorgehensweise: Abrufen des Fingerabdrucks eines Zertifikats

Konzepte

Verwenden von Zertifikaten