Overzicht van transportbeveiliging
Transportbeveiligingsmechanismen in WCF (Windows Communication Foundation) zijn afhankelijk van de binding en het gebruikte transport. Wanneer u bijvoorbeeld de WSHttpBinding klasse gebruikt, is het transport HTTP en het primaire mechanisme voor het beveiligen van het transport is Secure Sockets Layer (SSL) via HTTP, ook wel HTTPS genoemd. In dit onderwerp worden de belangrijkste transportbeveiligingsmechanismen besproken die worden gebruikt in de door het WCF-systeem geleverde bindingen.
Notitie
Wanneer SSL-beveiliging wordt gebruikt met .NET Framework 3.5 en hoger, gebruikt een WCF-client zowel de tussenliggende certificaten in het certificaatarchief als de tussenliggende certificaten die tijdens SSL-onderhandeling worden ontvangen om certificaatketenvalidatie uit te voeren op het certificaat van de service. .NET Framework 3.0 maakt alleen gebruik van de tussenliggende certificaten die zijn geïnstalleerd in het lokale certificaatarchief.
Waarschuwing
Wanneer transportbeveiliging wordt gebruikt, kan de Thread.CurrentPrincipal eigenschap worden overschreven. Om te voorkomen dat dit gebeurt, stelt u de ServiceAuthorizationBehavior.PrincipalPermissionMode optie in op PrincipalPermissionMode.None. ServiceAuthorizationBehavior is een servicegedrag dat kan worden ingesteld op de servicebeschrijving.
BasicHttpBinding
Standaard biedt de BasicHttpBinding klasse geen beveiliging. Deze binding is ontworpen voor interoperabiliteit met webserviceproviders die geen beveiliging implementeren. U kunt echter beveiliging inschakelen door de Mode eigenschap in te stellen op een willekeurige waarde, met uitzondering van None. Als u transportbeveiliging wilt inschakelen, stelt u de eigenschap in op Transport.
Interoperation with IIS
De BasicHttpBinding klasse wordt voornamelijk gebruikt om samen te werken met bestaande webservices en veel van deze services worden gehost door Internet Information Services (IIS). Daarom is de transportbeveiliging voor deze binding ontworpen voor naadloze interoperation met IIS-sites. Dit wordt gedaan door de beveiligingsmodus in te Transport stellen op en vervolgens het clientreferentietype in te stellen. De referentietypewaarden komen overeen met iis-adreslijstbeveiligingsmechanismen. De volgende code toont de modus die wordt ingesteld en het referentietype ingesteld op Windows. U kunt deze configuratie gebruiken wanneer zowel de client als de server zich in hetzelfde Windows-domein bevinden.
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
Of, in configuratie:
<bindings>
<basicHttpBinding>
<binding name="SecurityByTransport">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
In de volgende secties worden andere clientreferentietypen besproken.
Basis
Dit komt overeen met de basisverificatiemethode in IIS. Wanneer u deze modus gebruikt, moet de IIS-server worden geconfigureerd met Windows-gebruikersaccounts en de juiste NTFS-bestandssysteemmachtigingen. Zie Basisverificatie inschakelen en de realmnaam configureren voor meer informatie over IIS 6.0. Zie Basisverificatie (IIS 7) configureren voor meer informatie over IIS 7.0.
Certificaat
IIS heeft een optie om clients te verplichten zich aan te melden met een certificaat. Met deze functie kan IIS ook een clientcertificaat toewijzen aan een Windows-account. Zie Clientcertificaten inschakelen in IIS 6.0 voor meer informatie over IIS 6.0. Zie Servercertificaten configureren in IIS 7.0 voor meer informatie over IIS 7.
Digest
Digest-verificatie is vergelijkbaar met basisverificatie, maar biedt het voordeel van het verzenden van de referenties als een hash, in plaats van in duidelijke tekst. Zie Digest Authentication in IIS 6.0 voor meer informatie over IIS 6.0. Zie Configure Digest Authentication (IIS 7) voor meer informatie over IIS 7.0.
Vensters
Dit komt overeen met geïntegreerde Windows-verificatie in IIS. Wanneer deze waarde is ingesteld, wordt verwacht dat de server ook aanwezig is in een Windows-domein dat gebruikmaakt van het Kerberos-protocol als domeincontroller. Als de server zich niet in een met Kerberos ondersteund domein bevindt of als het Kerberos-systeem mislukt, kunt u de NT LAN Manager-waarde (NTLM) gebruiken die in de volgende sectie wordt beschreven. Zie Geïntegreerde Windows-verificatie in IIS 6.0 voor meer informatie over IIS 6.0. Zie Servercertificaten configureren in IIS 7.0 voor meer informatie over IIS 7.
NTLM
Hierdoor kan de server NTLM gebruiken voor verificatie als het Kerberos-protocol mislukt. Zie NTLM-verificatie afdwingen voor meer informatie over het configureren van IIS in IIS 6.0. Voor IIS 7.0 bevat de Windows-verificatie NTLM-verificatie. Zie Servercertificaten configureren in IIS 7 voor meer informatie.
WsHttpBinding
De WSHttpBinding klasse is ontworpen voor samenwerking met services die WS-*-specificaties implementeren. De transportbeveiliging voor deze binding is Secure Sockets Layer (SSL) via HTTP of HTTPS. Als u een WCF-toepassing wilt maken die gebruikmaakt van SSL, gebruikt u IIS om de toepassing te hosten. Als u een zelf-hostende toepassing maakt, kunt u ook het hulpprogramma HttpCfg.exe gebruiken om een X.509-certificaat te binden aan een specifieke poort op een computer. Het poortnummer wordt opgegeven als onderdeel van de WCF-toepassing als eindpuntadres. Wanneer u de transportmodus gebruikt, moet het eindpuntadres het HTTPS-protocol bevatten of wordt er een uitzondering gegenereerd tijdens de uitvoering. Zie HTTP Transport Security voor meer informatie.
Stel voor clientverificatie de ClientCredentialType eigenschap van de HttpTransportSecurity klasse in op een van de HttpClientCredentialType opsommingswaarden. De opsommingswaarden zijn identiek aan de clientreferentietypen voor BasicHttpBinding en zijn ontworpen om te worden gehost met IIS-services.
In het volgende voorbeeld ziet u de binding die wordt gebruikt met een clientreferentietype van 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
Deze binding biedt alleen beveiliging op berichtniveau, niet beveiliging op transportniveau.
NetTcpBinding
De NetTcpBinding klasse gebruikt TCP voor berichttransport. Beveiliging voor de transportmodus wordt geboden door TRANSPORT Layer Security (TLS) via TCP te implementeren. De TLS-implementatie wordt geleverd door het besturingssysteem.
U kunt ook het referentietype van de client opgeven door de ClientCredentialType eigenschap van de TcpTransportSecurity klasse in te stellen op een van de TcpClientCredentialType waarden, zoals wordt weergegeven in de volgende code.
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
Klant
Op de client moet u een certificaat opgeven met behulp van de SetCertificate methode van de X509CertificateInitiatorClientCredential klasse.
Notitie
Als u Windows-beveiliging gebruikt, is een certificaat niet vereist.
De volgende code maakt gebruik van de vingerafdruk van het certificaat, waarmee het uniek wordt geïdentificeerd. Zie Werken met certificaten voor meer informatie over certificaten.
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")
U kunt ook het certificaat opgeven in de configuratie van de client met behulp van een <clientCredentials-element> in de sectie Gedrag.
<behaviors>
<behavior>
<clientCredentials>
<clientCertificate findValue= "101010101010101010101010101010000000000"
storeLocation="LocalMachine" storeName="My"
X509FindType="FindByThumbPrint">
</clientCertificate>
</clientCredentials>
</behavior>
</behaviors>
NetNamedPipeBinding
De NetNamedPipeBinding klasse is ontworpen voor efficiënte communicatie tussen machines, dat wil gezegd, voor processen die op dezelfde computer worden uitgevoerd, hoewel benoemde pijpkanalen tussen twee computers in hetzelfde netwerk kunnen worden gemaakt. Deze binding biedt alleen beveiliging op transportniveau. Wanneer u toepassingen maakt die deze binding gebruiken, moeten de eindpuntadressen net.pipe bevatten als het protocol van het eindpuntadres.
WSFederationHttpBinding
Wanneer u transportbeveiliging gebruikt, gebruikt deze binding SSL via HTTP, ook wel HTTPS genoemd met een uitgegeven token (TransportWithMessageCredential). Zie Federatieve en uitgegeven tokens voor meer informatie over federatietoepassingen.
NetPeerTcpBinding
De NetPeerTcpBinding klasse is een veilig transport dat is ontworpen voor efficiënte communicatie met behulp van de peer-to-peer-netwerkfunctie. Zoals aangegeven door de naam van de klasse en binding, is TCP het protocol. Wanneer de beveiligingsmodus is ingesteld op Transport, implementeert de binding TLS via TCP. Zie Peer-to-Peer Networking voor meer informatie over de peer-to-peerfunctie.
MsmqIntegrationBinding en NetMsmqBinding
Zie Berichten beveiligen met transportbeveiliging met Message Queuing (voorheen MSMQ genoemd) voor een volledige bespreking van transportbeveiliging.