Udostępnij za pośrednictwem


Przegląd zabezpieczeń transportu

Mechanizmy zabezpieczeń transportu w programie Windows Communication Foundation (WCF) zależą od powiązania i transportu. Na przykład w przypadku korzystania z WSHttpBinding klasy transport to HTTP, a podstawowym mechanizmem zabezpieczania transportu jest protokół Secure Sockets Layer (SSL) za pośrednictwem protokołu HTTP, często nazywany https. W tym temacie omówiono główne mechanizmy zabezpieczeń transportu używane w powiązaniach dostarczanych przez system WCF.

Uwaga

Gdy zabezpieczenia SSL są używane z programem .NET Framework 3.5 i nowszym klient programu WCF używa zarówno certyfikatów pośrednich w magazynie certyfikatów, jak i certyfikatów pośrednich odebranych podczas negocjacji SSL w celu przeprowadzenia weryfikacji łańcucha certyfikatów na certyfikacie usługi. Program .NET Framework 3.0 używa tylko certyfikatów pośrednich zainstalowanych w lokalnym magazynie certyfikatów.

Ostrzeżenie

W przypadku użycia Thread.CurrentPrincipal zabezpieczeń transportu właściwość może zostać zastąpiona. Aby temu zapobiec, należy ustawić PrincipalPermissionMode.Nonewartość ServiceAuthorizationBehavior.PrincipalPermissionMode . ServiceAuthorizationBehavior to zachowanie usługi, które można ustawić w opisie usługi.

BasicHttpBinding

Domyślnie BasicHttpBinding klasa nie zapewnia zabezpieczeń. To powiązanie jest przeznaczone do współdziałania z dostawcami usług sieci Web, którzy nie implementują zabezpieczeń. Można jednak włączyć zabezpieczenia, ustawiając właściwość na dowolną Mode wartość z wyjątkiem None. Aby włączyć zabezpieczenia transportu, ustaw właściwość na Transport.

Współdziałanie z usługami IIS

Klasa BasicHttpBinding jest używana głównie do współdziałania z istniejącymi usługami sieci Web, a wiele z tych usług jest hostowanych przez internetowe usługi informacyjne (IIS). W związku z tym zabezpieczenia transportu dla tego powiązania są przeznaczone do bezproblemowego współdziałania z lokacjami usług IIS. W tym celu należy ustawić tryb zabezpieczeń na , a następnie ustawić Transport typ poświadczeń klienta. Wartości typu poświadczeń odpowiadają mechanizmom zabezpieczeń katalogu usług IIS. Poniższy kod przedstawia ustawiany tryb i typ poświadczeń ustawiony na windows. Tej konfiguracji można użyć, gdy zarówno klient, jak i serwer znajdują się w tej samej domenie systemu Windows.

BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

Lub w konfiguracji:

<bindings>  
  <basicHttpBinding>  
    <binding name="SecurityByTransport">  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" />  
       </security>  
     </binding>  
  </basicHttpBinding>  
</bindings>  

W poniższych sekcjach omówiono inne typy poświadczeń klienta.

Podstawowy

Odpowiada to metodzie uwierzytelniania podstawowego w usługach IIS. W przypadku korzystania z tego trybu serwer usług IIS musi być skonfigurowany z kontami użytkowników systemu Windows i odpowiednimi uprawnieniami systemu plików NTFS. Aby uzyskać więcej informacji na temat usług IIS 6.0, zobacz Włączanie uwierzytelniania podstawowego i Konfigurowanie nazwy obszaru. Aby uzyskać więcej informacji na temat usług IIS 7.0, zobacz Konfigurowanie uwierzytelniania podstawowego (IIS 7).

Certyfikat

Usługi IIS mają możliwość wymagania od klientów logowania się przy użyciu certyfikatu. Funkcja umożliwia również usługom IIS mapowania certyfikatu klienta na konto systemu Windows. Aby uzyskać więcej informacji na temat usług IIS 6.0, zobacz Włączanie certyfikatów klienta w usługach IIS 6.0. Aby uzyskać więcej informacji na temat usług IIS 7.0, zobacz Konfigurowanie certyfikatów serwera w usługach IIS 7.

Szyfrowane

Uwierzytelnianie szyfrowane jest podobne do uwierzytelniania podstawowego, ale oferuje zaletę wysyłania poświadczeń jako skrótu zamiast zwykłego tekstu. Aby uzyskać więcej informacji na temat usług IIS 6.0, zobacz Uwierzytelnianie szyfrowane w usługach IIS 6.0. Aby uzyskać więcej informacji na temat usług IIS 7.0, zobacz Konfigurowanie uwierzytelniania szyfrowego (IIS 7).

Windows

Odpowiada to zintegrowanemu uwierzytelnianiu systemu Windows w usługach IIS. Po ustawieniu tej wartości serwer ma również istnieć w domenie systemu Windows, która używa protokołu Kerberos jako kontrolera domeny. Jeśli serwer nie znajduje się w domenie opartej na protokole Kerberos lub system Kerberos ulegnie awarii, możesz użyć wartości NT LAN Manager (NTLM) opisanej w następnej sekcji. Aby uzyskać więcej informacji na temat usług IIS 6.0, zobacz Zintegrowane uwierzytelnianie systemu Windows w usługach IIS 6.0. Aby uzyskać więcej informacji na temat usług IIS 7.0, zobacz Konfigurowanie certyfikatów serwera w usługach IIS 7.

NTLM

Dzięki temu serwer może używać protokołu NTLM do uwierzytelniania, jeśli protokół Kerberos zakończy się niepowodzeniem. Aby uzyskać więcej informacji na temat konfigurowania usług IIS w usługach IIS 6.0, zobacz Wymuszanie uwierzytelniania NTLM. W przypadku usług IIS 7.0 uwierzytelnianie systemu Windows obejmuje uwierzytelnianie NTLM. Aby uzyskać więcej informacji, zobacz Konfigurowanie certyfikatów serwera w usługach IIS 7.

WsHttpBinding

Klasa jest przeznaczona WSHttpBinding do współdziałania z usługami, które implementują specyfikacje WS-*. Zabezpieczenia transportu dla tego powiązania to Secure Sockets Layer (SSL) za pośrednictwem protokołu HTTP lub HTTPS. Aby utworzyć aplikację WCF korzystającą z protokołu SSL, użyj usług IIS do hostowania aplikacji. Alternatywnie, jeśli tworzysz własną aplikację, użyj narzędzia HttpCfg.exe, aby powiązać certyfikat X.509 z określonym portem na komputerze. Numer portu jest określany jako część aplikacji WCF jako adres punktu końcowego. W przypadku korzystania z trybu transportu adres punktu końcowego musi zawierać protokół HTTPS lub w czasie wykonywania zostanie zgłoszony wyjątek. Aby uzyskać więcej informacji, zobacz Zabezpieczenia transportu HTTP.

W przypadku uwierzytelniania klienta ustaw ClientCredentialType właściwość HttpTransportSecurity klasy na jedną z HttpClientCredentialType wartości wyliczenia. Wartości wyliczenia są identyczne z typami BasicHttpBinding poświadczeń klienta dla programu i są przeznaczone do hostowania za pomocą usług IIS.

W poniższym przykładzie pokazano powiązanie używane z typem poświadczeń klienta systemu Windows.

// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

WSDualHttpBinding

To powiązanie zapewnia tylko zabezpieczenia na poziomie komunikatów, a nie zabezpieczenia na poziomie transportu.

Nettcpbinding

Klasa NetTcpBinding używa protokołu TCP do transportu komunikatów. Zabezpieczenia dla trybu transportu są zapewniane przez zaimplementowanie protokołu Transport Layer Security (TLS) za pośrednictwem protokołu TCP. Implementacja protokołu TLS jest dostarczana przez system operacyjny.

Możesz również określić typ poświadczeń klienta, ustawiając ClientCredentialType właściwość TcpTransportSecurity klasy na jedną z TcpClientCredentialType wartości, jak pokazano w poniższym kodzie.

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate

Klient

Na kliencie należy określić certyfikat przy użyciu SetCertificate metody X509CertificateInitiatorClientCredential klasy .

Uwaga

Jeśli używasz zabezpieczeń systemu Windows, certyfikat nie jest wymagany.

Poniższy kod używa odcisku palca certyfikatu, który jednoznacznie go identyfikuje. Aby uzyskać więcej informacji na temat certyfikatów, zobacz Praca z certyfikatami.

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
    StoreLocation.LocalMachine,
    StoreName.My,
    X509FindType.FindByThumbprint,
    "0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
    StoreLocation.LocalMachine, _
    StoreName.My, _
    X509FindType.FindByThumbprint, _
    "0000000000000000000000000000000000000000")

Alternatywnie określ certyfikat w konfiguracji klienta przy użyciu <elementu clientCredentials> w sekcji zachowania.

<behaviors>  
  <behavior>  
   <clientCredentials>  
     <clientCertificate findValue= "101010101010101010101010101010000000000"
      storeLocation="LocalMachine" storeName="My"
      X509FindType="FindByThumbPrint">  
     </clientCertificate>  
   </clientCredentials>  
 </behavior>  
</behaviors>

NetNamedPipeBinding

Klasa NetNamedPipeBinding została zaprojektowana pod kątem wydajnej komunikacji wewnątrz maszynowej, czyli w przypadku procesów działających na tym samym komputerze, chociaż kanały potoków nazwanych można tworzyć między dwoma komputerami w tej samej sieci. To powiązanie zapewnia tylko zabezpieczenia na poziomie transportu. Podczas tworzenia aplikacji przy użyciu tego powiązania adresy punktów końcowych muszą zawierać ciąg "net.pipe" jako protokół adresu punktu końcowego.

WSFederationHttpBinding

W przypadku korzystania z zabezpieczeń transportu to powiązanie używa protokołu SSL za pośrednictwem protokołu HTTP, znanego jako HTTPS z wystawionym tokenem (TransportWithMessageCredential). Aby uzyskać więcej informacji na temat aplikacji federacyjnych, zobacz Federacja i Wystawione tokeny.

Netpeertcpbinding

Klasa NetPeerTcpBinding to bezpieczny transport przeznaczony do wydajnej komunikacji przy użyciu funkcji sieci równorzędnej. Zgodnie z nazwą klasy i powiązania protokół TCP jest protokołem. Gdy tryb zabezpieczeń jest ustawiony na Transport, powiązanie implementuje protokół TLS za pośrednictwem protokołu TCP. Aby uzyskać więcej informacji na temat funkcji komunikacji równorzędnej, zobacz Peer-to-Peer Networking (Sieć równorzędna).

MsmqIntegrationBinding i NetMsmqBinding

Aby zapoznać się z pełną dyskusją na temat zabezpieczeń transportu przy użyciu kolejkowania komunikatów (wcześniej nazywanego MSMQ), zobacz Zabezpieczanie komunikatów przy użyciu zabezpieczeń transportu.

Zobacz też