Dela via


Gör så här: Gör X.509-certifikat tillgängliga för WCF

Om du vill göra ett X.509-certifikat tillgängligt för Windows Communication Foundation (WCF) måste programkoden ange certifikatarkivets namn och plats. Under vissa omständigheter måste processidentiteten ha åtkomst till filen som innehåller den privata nyckel som är associerad med X.509-certifikatet. För att hämta den privata nyckeln som är associerad med ett X.509-certifikat i ett certifikatarkiv måste WCF ha behörighet att göra det. Som standard kan endast ägaren och systemkontot komma åt den privata nyckeln för ett certifikat.

Så här gör du X.509-certifikat tillgängliga för WCF

  1. Ge det konto under vilket WCF kör läsåtkomst till filen som innehåller den privata nyckel som är associerad med X.509-certifikatet.

    1. Avgör om WCF kräver läsbehörighet till den privata nyckeln för X.509-certifikatet.

      I följande tabell beskrivs om en privat nyckel måste vara tillgänglig när du använder ett X.509-certifikat.

      X.509-certifikatanvändning Privat nyckel
      Signera ett utgående SOAP-meddelande digitalt. Ja
      Verifiera signaturen för ett inkommande SOAP-meddelande. Nej
      Kryptera ett utgående SOAP-meddelande. Nej
      Dekryptera ett inkommande SOAP-meddelande. Ja
    2. Fastställa certifikatarkivets plats och namn där certifikatet lagras.

      Certifikatarkivet där certifikatet lagras anges antingen i programkoden eller i konfigurationen. I följande exempel anges till exempel att certifikatet finns i certifikatarkivet CurrentUser med namnet 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. Ta reda på var den privata nyckeln för certifikatet finns på datorn med hjälp av verktyget FindPrivateKey .

      Verktyget FindPrivateKey kräver certifikatarkivets namn, platsen för certifikatarkivet och något som unikt identifierar certifikatet. Verktyget accepterar antingen certifikatets ämnesnamn eller dess tumavtryck som en unik identifierare. Mer information om hur du fastställer tumavtrycket för ett certifikat finns i Så här hämtar du tumavtrycket för ett certifikat.

      I följande kodexempel används verktyget FindPrivateKey för att fastställa platsen för den privata nyckeln för ett certifikat i arkivet My i CurrentUser med tumavtrycket 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. Fastställ det konto som WCF körs under.

      I följande tabell beskrivs det konto under vilket WCF körs för ett visst scenario.

      Scenario Processidentitet
      Klient (konsol- eller WinForms-program). För närvarande inloggad användare.
      Tjänst som är lokalt installerad. För närvarande inloggad användare.
      Tjänst som finns i IIS 6.0 (Windows Server 2003) eller IIS 7.0 (Windows Vista). NÄTVERKSTJÄNST
      Tjänst som finns i IIS 5.X (Windows XP). Styrs av elementet <processModel> i filen Machine.config. Standardkontot är ASPNET.
    5. Bevilja läsbehörighet till filen som innehåller den privata nyckeln till det konto som WCF körs under med hjälp av ett verktyg som icacls.exe.

      I följande kodexempel redigeras DACL (Discretionary Access Control List) för den angivna filen för att ge NETWORK SERVICE-kontot läsbehörighet (:R) till filen.

      icacls.exe "C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys\8aeda5eb81555f14f8f9960745b5a40d_38f7de48-5ee9-452d-8a5a-92789d7110b1" /grant "NETWORK SERVICE":R  
      

Se även