Udostępnij za pośrednictwem


Instrukcje: Udostępnianie certyfikatów X.509 w architekturze WCF

Aby udostępnić certyfikat X.509 programowi Windows Communication Foundation (WCF), kod aplikacji musi określać nazwę i lokalizację magazynu certyfikatów. W pewnych okolicznościach tożsamość procesu musi mieć dostęp do pliku zawierającego klucz prywatny skojarzony z certyfikatem X.509. Aby uzyskać klucz prywatny skojarzony z certyfikatem X.509 w magazynie certyfikatów, program WCF musi mieć do tego uprawnienia. Domyślnie tylko właściciel i konto systemowe mogą uzyskiwać dostęp do klucza prywatnego certyfikatu.

Aby udostępnić certyfikaty X.509 WCF

  1. Nadaj kontu, w ramach którego program WCF uruchamia dostęp do odczytu do pliku zawierającego klucz prywatny skojarzony z certyfikatem X.509.

    1. Ustal, czy program WCF wymaga dostępu do odczytu do klucza prywatnego dla certyfikatu X.509.

      W poniższej tabeli przedstawiono, czy klucz prywatny musi być dostępny podczas korzystania z certyfikatu X.509.

      Użycie certyfikatu X.509 Klucz prywatny
      Cyfrowo wylogowywanie wychodzącej wiadomości SOAP. Tak
      Weryfikowanie podpisu przychodzącego komunikatu PROTOKOŁU SOAP. Nie.
      Szyfrowanie wychodzącej wiadomości PROTOKOŁU SOAP. Nie.
      Odszyfrowywanie przychodzącego komunikatu PROTOKOŁU SOAP. Tak
    2. Określ lokalizację magazynu certyfikatów i nazwę, w której jest przechowywany certyfikat.

      Magazyn certyfikatów, w którym jest przechowywany certyfikat, jest określony w kodzie aplikacji lub w konfiguracji. Na przykład poniższy przykład określa, że certyfikat znajduje się w CurrentUser magazynie certyfikatów o nazwie 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. Ustal, gdzie klucz prywatny certyfikatu znajduje się na komputerze przy użyciu narzędzia FindPrivateKey .

      Narzędzie FindPrivateKey wymaga nazwy magazynu certyfikatów, lokalizacji magazynu certyfikatów i unikatowego identyfikatora certyfikatu. Narzędzie akceptuje nazwę podmiotu certyfikatu lub jego odcisk palca jako unikatowy identyfikator. Aby uzyskać więcej informacji na temat określania odcisku palca certyfikatu, zobacz Jak pobrać odcisk palca certyfikatu.

      W poniższym przykładzie kodu użyto narzędzia FindPrivateKey , aby określić lokalizację klucza prywatnego certyfikatu w My magazynie CurrentUser za pomocą odcisku 46 dd 0e 7a ed 0b 7a 31 9b 02 a3 a0 43 7a d8 3f 60 40 92 9dpalca .

      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. Określ konto, w którym działa program WCF.

      Poniższa tabela zawiera szczegółowe informacje o koncie, na którym działa program WCF dla danego scenariusza.

      Scenariusz Tożsamość procesu
      Klient (konsola lub aplikacja WinForms). Obecnie zalogowany użytkownik.
      Usługa, która jest hostowana samodzielnie. Obecnie zalogowany użytkownik.
      Usługa hostowana w usługach IIS 6.0 (Windows Server 2003) lub IIS 7.0 (Windows Vista). USŁUGA SIECIOWA
      Usługa hostowana w usługach IIS 5.X (Windows XP). Kontrolowane przez <processModel> element w pliku Machine.config. Domyślne konto to ASPNET.
    5. Udziel dostępu do odczytu do pliku zawierającego klucz prywatny do konta, w którym działa program WCF, przy użyciu narzędzia takiego jak icacls.exe.

      Poniższy przykład kodu edytuje uznaniową listę kontroli dostępu (DACL) dla określonego pliku w celu udzielenia dostępu do pliku na koncie USŁUGI SIECIOWEJ (:R).

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

Zobacz też