Sdílet prostřednictvím


Postupy: Zpřístupnění certifikátů X.509 pro WCF

Aby byl certifikát X.509 přístupný službě Windows Communication Foundation (WCF), musí kód aplikace zadat název a umístění úložiště certifikátů. Za určitých okolností musí mít identita procesu přístup k souboru, který obsahuje privátní klíč přidružený k certifikátu X.509. K získání privátního klíče přidruženého k certifikátu X.509 v úložišti certifikátů musí mít WCF oprávnění k tomu. Ve výchozím nastavení má k privátnímu klíči certifikátu přístup jenom vlastník a systémový účet.

Zpřístupnění certifikátů X.509 pro WCF

  1. Udělte účtu, pod kterým wcf spouští přístup pro čtení k souboru, který obsahuje privátní klíč přidružený k certifikátu X.509.

    1. Zjistěte, jestli WCF vyžaduje přístup pro čtení k privátnímu klíči pro certifikát X.509.

      Následující tabulka podrobně popisuje, jestli musí být privátní klíč dostupný při použití certifikátu X.509.

      Použití certifikátu X.509 Privátní klíč
      Digitálně podepisuje odchozí zprávu PROTOKOLU SOAP. Ano
      Ověření podpisu příchozí zprávy SOAP No
      Šifrování odchozí zprávy SOAP No
      Dešifrování příchozí zprávy SOAP Ano
    2. Určete umístění a název úložiště certifikátů, ve kterém je certifikát uložený.

      Úložiště certifikátů, ve kterém je certifikát uložený, je určeno buď v kódu aplikace, nebo v konfiguraci. Například následující příklad určuje, že certifikát je umístěn v CurrentUser úložišti certifikátů s názvem 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. Pomocí nástroje FindPrivateKey určete, kde se privátní klíč certifikátu nachází v počítači.

      Nástroj FindPrivateKey vyžaduje název úložiště certifikátů, umístění úložiště certifikátů a něco, co certifikát jednoznačně identifikuje. Nástroj přijímá buď název subjektu certifikátu, nebo jeho kryptografický otisk jako jedinečný identifikátor. Další informace o tom, jak určit kryptografický otisk certifikátu, naleznete v tématu Postupy: Načtení kryptografického otisku certifikátu.

      Následující příklad kódu používá nástroj FindPrivateKey k určení umístění privátního klíče pro certifikát v My úložišti s CurrentUser kryptografickým otiskem 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. Určete účet, pod kterým je spuštěná služba WCF.

      Následující tabulka podrobně popisuje účet, pod kterým je WCF spuštěný pro daný scénář.

      Scénář Identita procesu
      Klient (konzola nebo aplikace WinForms). Aktuálně přihlášený uživatel.
      Služba, která je hostovaná samostatně. Aktuálně přihlášený uživatel.
      Služba hostovaná ve službě IIS 6.0 (Windows Server 2003) nebo IIS 7.0 (Windows Vista). SÍŤOVÁ SLUŽBA
      Služba hostovaná ve službě IIS 5.X (Windows XP). Řídí se elementem <processModel> v souboru Machine.config. Výchozí účet je ASPNET.
    5. Pomocí nástroje, jako je icacls.exe, udělte souboru, který obsahuje privátní klíč, přístup ke čtení účtu, pod kterým je spuštěná služba WCF.

      Následující příklad kódu upraví volitelný seznam řízení přístupu (DACL) pro zadaný soubor tak, aby účet NETWORK SERVICE pro čtení (:R) přístup k souboru.

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

Viz také