Sdílet prostřednictvím


Přehled zabezpečení přenosu

Mechanismy zabezpečení přenosu ve Službě Windows Communication Foundation (WCF) závisí na použité vazbě a přenosu. Například při použití WSHttpBinding třídy je přenos HTTP a primárním mechanismem pro zabezpečení přenosu je Protokol SSL (Secure Sockets Layer) přes protokol HTTP, běžně označovaný jako HTTPS. Toto téma popisuje hlavní mechanismy zabezpečení přenosu používané v systémových vazbách WCF.

Poznámka:

Při použití zabezpečení SSL s rozhraním .NET Framework 3.5 a novějším klientEM WCF se používají zprostředkující certifikáty v úložišti certifikátů i zprostředkující certifikáty přijaté během vyjednávání SSL k ověření řetězu certifikátů na certifikátu služby. Rozhraní .NET Framework 3.0 používá pouze zprostředkující certifikáty nainstalované v místním úložišti certifikátů.

Upozorňující

Při použití Thread.CurrentPrincipal zabezpečení přenosu může být vlastnost přepsána. Chcete-li zabránit tomu, aby to bylo nastaveno ServiceAuthorizationBehavior.PrincipalPermissionMode na PrincipalPermissionMode.Nonehodnotu . ServiceAuthorizationBehavior je chování služby, které lze nastavit v popisu služby.

BasicHttpBinding

Ve výchozím nastavení BasicHttpBinding třída neposkytuje zabezpečení. Tato vazba je navržená pro interoperabilitu s poskytovateli webových služeb, kteří neimplementují zabezpečení. Zabezpečení však můžete zapnout nastavením Mode vlastnosti na libovolnou hodnotu s výjimkou None. Chcete-li povolit zabezpečení přenosu, nastavte vlastnost na Transporthodnotu .

Spolupráce se službou IIS

Třída BasicHttpBinding se primárně používá k spolupráci s existujícími webovými službami a mnoho z těchto služeb je hostováno Internetová informační služba (IIS). V důsledku toho je zabezpečení přenosu pro tuto vazbu určeno pro bezproblémovou spolupráci s lokalitami služby IIS. To se provádí nastavením režimu zabezpečení na Transport typ přihlašovacích údajů klienta a následným nastavením typu přihlašovacích údajů klienta. Hodnoty typu přihlašovacích údajů odpovídají mechanismům zabezpečení adresáře služby IIS. Následující kód ukazuje režim, který se nastavuje, a typ přihlašovacích údajů nastavený na Windows. Tuto konfiguraci můžete použít, když jsou klient i server ve stejné doméně 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

Nebo v konfiguraci:

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

V následujících částech jsou popsány další typy přihlašovacích údajů klienta.

Basic

To odpovídá metodě základního ověřování ve službě IIS. Při použití tohoto režimu musí být server IIS nakonfigurovaný s uživatelskými účty Systému Windows a odpovídajícími oprávněními systému souborů NTFS. Další informace o službě IIS 6.0 naleznete v tématu Povolení základního ověřování a konfigurace názvu sféry. Další informace o službě IIS 7.0 naleznete v tématu Konfigurace základního ověřování (IIS 7).

Certifikát

Služba IIS má možnost vyžadovat, aby se klienti přihlásili pomocí certifikátu. Tato funkce také umožňuje službě IIS namapovat klientský certifikát na účet Systému Windows. Další informace o službě IIS 6.0 naleznete v tématu Povolení klientských certifikátů ve službě IIS 6.0. Další informace o službě IIS 7.0 naleznete v tématu Konfigurace certifikátů serveru ve službě IIS 7.

Digest

Ověřování hodnotou hash se podobá základnímu ověřování, ale nabízí výhodu odesílání přihlašovacích údajů jako hodnoty hash místo v prostém textu. Další informace o službě IIS 6.0 naleznete v tématu Ověřování hodnotou hash ve službě IIS 6.0. Další informace o službě IIS 7.0 naleznete v tématu Konfigurace ověřování hodnotou hash (IIS 7).

Windows

To odpovídá integrovanému ověřování systému Windows ve službě IIS. Pokud je tato hodnota nastavená, očekává se, že server existuje také v doméně Systému Windows, která jako řadič domény používá protokol Kerberos. Pokud server není v doméně založené na protokolu Kerberos nebo pokud selže systém Kerberos, můžete použít hodnotu NT LAN Manager (NTLM) popsanou v další části. Další informace o službě IIS 6.0 naleznete v tématu Integrované ověřování systému Windows ve službě IIS 6.0. Další informace o službě IIS 7.0 naleznete v tématu Konfigurace certifikátů serveru ve službě IIS 7.

NTLM

Server tak může k ověřování použít protokol NTLM, pokud selže protokol Kerberos. Další informace o konfiguraci služby IIS ve službě IIS 6.0 naleznete v tématu Vynucení ověřování NTLM. Pro službu IIS 7.0 ověřování systému Windows zahrnuje ověřování NTLM. Další informace naleznete v tématu Konfigurace certifikátů serveru ve službě IIS 7.

WsHttpBinding

Třída WSHttpBinding je navržena pro spolupráci se službami, které implementují specifikace WS-*. Zabezpečení přenosu pro tuto vazbu je ssl (Secure Sockets Layer) přes PROTOKOL HTTP nebo HTTPS. Chcete-li vytvořit aplikaci WCF, která používá protokol SSL, použijte službu IIS k hostování aplikace. Pokud také vytváříte aplikaci v místním prostředí, použijte nástroj HttpCfg.exe k vytvoření vazby certifikátu X.509 na konkrétní port v počítači. Číslo portu se zadává jako součást aplikace WCF jako adresa koncového bodu. Při použití přenosového režimu musí adresa koncového bodu obsahovat protokol HTTPS nebo dojde k výjimce za běhu. Další informace naleznete v tématu Zabezpečení přenosu PROTOKOLU HTTP.

Pro ověřování klienta nastavte ClientCredentialType vlastnost HttpTransportSecurity třídy na jednu z hodnot výčtu HttpClientCredentialType . Hodnoty výčtu jsou identické s typy přihlašovacích údajů klienta a BasicHttpBinding jsou navržené tak, aby byly hostovány se službami IIS.

Následující příklad ukazuje vazbu používanou s typem přihlašovacích údajů klienta systému 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

Tato vazba poskytuje pouze zabezpečení na úrovni zpráv, nikoli zabezpečení na úrovni přenosu.

Nettcpbinding

Třída NetTcpBinding používá protokol TCP pro přenos zpráv. Zabezpečení pro režim přenosu je poskytováno implementací protokolu TLS (Transport Layer Security) přes protokol TCP. Implementace protokolu TLS je poskytována operačním systémem.

Typ přihlašovacích údajů klienta můžete také určit nastavením ClientCredentialType vlastnosti TcpTransportSecurity třídy na jednu z TcpClientCredentialType hodnot, jak je znázorněno v následujícím kódu.

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

V klientovi je nutné zadat certifikát pomocí SetCertificate metody X509CertificateInitiatorClientCredential třídy.

Poznámka:

Pokud používáte zabezpečení Systému Windows, certifikát se nevyžaduje.

Následující kód používá kryptografický otisk certifikátu, který ho jednoznačně identifikuje. Další informace o certifikátech naleznete v tématu Práce s certifikáty.

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")

Případně v části chování zadejte certifikát v konfiguraci klienta pomocí elementu clientCredentials>.<

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

NetNamedPipeBinding

Třída NetNamedPipeBinding je navržena pro efektivní komunikaci uvnitř počítače; to znamená pro procesy spuštěné na stejném počítači, i když pojmenované kanály mohou být vytvořeny mezi dvěma počítači ve stejné síti. Tato vazba poskytuje pouze zabezpečení na úrovni přenosu. Při vytváření aplikací pomocí této vazby musí adresy koncových bodů obsahovat jako protokol adresy koncového bodu "net.pipe".

WSFederationHttpBinding

Při použití zabezpečení přenosu používá tato vazba protokol SSL přes protokol HTTP, označovaný jako HTTPS s vydaným tokenem (TransportWithMessageCredential). Další informace o federačních aplikacích najdete v tématu Federace a vystavené tokeny.

NetPeerTcpBinding

Třída NetPeerTcpBinding je zabezpečený přenos, který je navržený pro efektivní komunikaci pomocí funkce sítě peer-to-peer. Jak je uvedeno názvem třídy a vazby, TCP je protokol. Pokud je režim zabezpečení nastavený na Přenos, vazba implementuje protokol TLS přes protokol TCP. Další informace o funkci peer-to-peer naleznete v tématu Sítě peer-to-peer.

MsmqIntegrationBinding a NetMsmqBinding

Úplnou diskuzi o zabezpečení přenosu pomocí služby Řízení front zpráv (dříve označované jako MSMQ) najdete v tématu Zabezpečení zpráv pomocí zabezpečení přenosu.

Viz také