Dela via


Översikt över transportsäkerhet

Transportsäkerhetsmekanismer i Windows Communication Foundation (WCF) är beroende av bindning och transport som används. När du till exempel använder WSHttpBinding klassen är transporten HTTP och den primära mekanismen för att skydda transporten är Secure Sockets Layer (SSL) via HTTP, som vanligtvis kallas HTTPS. I det här avsnittet beskrivs de viktigaste transportsäkerhetsmekanismerna som används i bindningar som tillhandahålls av WCF-systemet.

Kommentar

När SSL-säkerhet används med .NET Framework 3.5 och senare använder en WCF-klient både mellanliggande certifikat i certifikatarkivet och mellanliggande certifikat som togs emot under SSL-förhandlingen för att utföra validering av certifikatkedjan på tjänstens certifikat. .NET Framework 3.0 använder endast mellanliggande certifikat som är installerade i det lokala certifikatarkivet.

Varning

När transportsäkerhet används kan egenskapen Thread.CurrentPrincipal skrivas över. För att förhindra att detta händer anger du ServiceAuthorizationBehavior.PrincipalPermissionMode till PrincipalPermissionMode.None. ServiceAuthorizationBehavior är ett tjänstbeteende som kan anges i tjänstbeskrivningen.

BasicHttpBinding

Klassen tillhandahåller som standard BasicHttpBinding inte säkerhet. Den här bindningen är utformad för samverkan med webbtjänstleverantörer som inte implementerar säkerhet. Du kan dock aktivera säkerhet genom att ange Mode egenskapen till valfritt värde utom None. Om du vill aktivera transportsäkerhet anger du egenskapen till Transport.

Interoperation med IIS

Klassen BasicHttpBinding används främst för att samverka med befintliga webbtjänster, och många av dessa tjänster hanteras av Internet Information Services (IIS). Därför är transportsäkerheten för denna bindning utformad för sömlöst samarbete med IIS-platser. Detta görs genom att ställa in säkerhetsläget på Transport och sedan ange klientens autentiseringsuppgiftstyp. Värdena för typ av autentiseringsuppgifter motsvarar IIS-katalogsäkerhetsmekanismer. Följande kod visar läget som anges och autentiseringstypen inställd på Windows. Du kan använda den här konfigurationen när både klienten och servern finns på samma Windows-domän.

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

Eller i konfigurationen:

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

I följande avsnitt beskrivs andra typer av klientautentiseringsuppgifter.

Grundläggande

Detta motsvarar metoden Grundläggande autentisering i IIS. När du använder det här läget måste IIS-servern konfigureras med Windows-användarkonton och lämpliga NTFS-filsystembehörigheter. Mer information om IIS 6.0 finns i Aktivera grundläggande autentisering och konfigurera sfärnamnet. Mer information om IIS 7.0 finns i Konfigurera grundläggande autentisering (IIS 7).

Certifikat

IIS har ett alternativ för att kräva att klienter loggar in med ett certifikat. Funktionen gör det också möjligt för IIS att mappa ett klientcertifikat till ett Windows-konto. Mer information om IIS 6.0 finns i Aktivera klientcertifikat i IIS 6.0. Mer information om IIS 7.0 finns i Konfigurera servercertifikat i IIS 7.

Digest

Sammanfattad autentisering liknar grundläggande autentisering, men erbjuder fördelen med att skicka autentiseringsuppgifterna som en hash i stället för i klartext. Mer information om IIS 6.0 finns i Sammanfattad autentisering i IIS 6.0. Mer information om IIS 7.0 finns i Konfigurera sammanfattad autentisering (IIS 7).

Windows

Detta motsvarar integrerad Windows-autentisering i IIS. När värdet är inställt på det här värdet förväntas servern också finnas på en Windows-domän som använder Kerberos-protokollet som domänkontrollant. Om servern inte finns på en Kerberos-backad domän, eller om Kerberos-systemet misslyckas, kan du använda värdet NT LAN Manager (NTLM) som beskrivs i nästa avsnitt. Mer information om IIS 6.0 finns i Integrerad Windows-autentisering i IIS 6.0. Mer information om IIS 7.0 finns i Konfigurera servercertifikat i IIS 7.

NTLM

Detta gör att servern kan använda NTLM för autentisering om Kerberos-protokollet misslyckas. Mer information om hur du konfigurerar IIS i IIS 6.0 finns i Tvinga NTLM-autentisering. För IIS 7.0 innehåller Windows-autentiseringen NTLM-autentisering. Mer information finns i Konfigurera servercertifikat i IIS 7.

WsHttpBinding

Klassen WSHttpBinding är utformad för samarbete med tjänster som implementerar WS-*-specifikationer. Transportsäkerheten för den här bindningen är Secure Sockets Layer (SSL) via HTTP eller HTTPS. Om du vill skapa ett WCF-program som använder SSL använder du IIS som värd för programmet. Om du skapar ett program med egen värd kan du också använda verktyget HttpCfg.exe för att binda ett X.509-certifikat till en specifik port på en dator. Portnumret anges som en del av WCF-programmet som en slutpunktsadress. När du använder transportläge måste slutpunktsadressen innehålla HTTPS-protokollet, annars utlöses ett undantag vid körning. Mer information finns i HTTP Transport Security.

För klientautentisering anger du ClientCredentialType egenskapen för HttpTransportSecurity klassen till ett av uppräkningsvärdena HttpClientCredentialType . Uppräkningsvärdena är identiska med klientautentiseringstyperna för och är utformade för BasicHttpBinding att hanteras med IIS-tjänster.

I följande exempel visas bindningen som används med en windows-typ av klientautentiseringsuppgifter.

// 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

Den här bindningen ger endast säkerhet på meddelandenivå, inte säkerhet på transportnivå.

NetTcpBinding

Klassen NetTcpBinding använder TCP för meddelandetransport. Säkerhet för transportläget tillhandahålls genom implementering av TLS (Transport Layer Security) via TCP. TLS-implementeringen tillhandahålls av operativsystemet.

Du kan också ange klientens typ av TcpTransportSecurity autentiseringsuppgifter genom att ange ClientCredentialType egenskapen för klassen till ett av TcpClientCredentialType värdena, enligt följande kod.

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

På klienten måste du ange ett certifikat med hjälp SetCertificate av -metoden för X509CertificateInitiatorClientCredential klassen.

Kommentar

Om du använder Windows-säkerhet krävs inget certifikat.

I följande kod används tumavtrycket för certifikatet, som unikt identifierar det. Mer information om certifikat finns i Arbeta med certifikat.

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

Du kan också ange certifikatet i klientens konfiguration med hjälp av ett <clientCredentials-element> i avsnittet beteenden.

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

NetNamedPipeBinding

Klassen NetNamedPipeBinding är utformad för effektiv kommunikation mellan datorer, dvs. för processer som körs på samma dator, även om namngivna rörkanaler kan skapas mellan två datorer i samma nätverk. Den här bindningen ger endast säkerhet på transportnivå. När du skapar program med den här bindningen måste slutpunktsadresserna innehålla "net.pipe" som protokoll för slutpunktsadressen.

WSFederationHttpBinding

När du använder transportsäkerhet använder den här bindningen SSL via HTTP, som kallas HTTPS med en utfärdad token (TransportWithMessageCredential). Mer information om federationsprogram finns i Federations- och utfärdade token.

NetPeerTcpBinding

Klassen NetPeerTcpBinding är en säker transport som är utformad för effektiv kommunikation med hjälp av peer-to-peer-nätverksfunktionen. Enligt namnet på klassen och bindningen är TCP protokollet. När säkerhetsläget är inställt på Transport implementerar bindningen TLS över TCP. Mer information om peer-to-peer-funktionen finns i Peer-to-Peer-nätverk.

MsmqIntegrationBinding och NetMsmqBinding

En fullständig diskussion om transportsäkerhet med Message Queuing (tidigare kallat MSMQ) finns i Skydda meddelanden med transportsäkerhet.

Se även