Condividi tramite


Panoramica sulla sicurezza del trasporto

I meccanismi di sicurezza del trasporto di Windows Communication Foundation (WCF) dipendono dall'associazione e dal trasporto utilizzati. Ad esempio, quando si utilizza la classe WSHttpBinding, il trasporto è HTTP e il meccanismo principale per la sicurezza del trasporto è SSL (Secure Sockets Layer) su HTTP, comunemente noto come HTTP. In questo argomento vengono illustrati i principali meccanismi di sicurezza del trasporto utilizzati nelle associazioni fornite dal sistema WCF.

ms729700.note(it-it,VS.100).gifNota:
Quando viene utilizzata la sicurezza SSL con .NET Framework 3.5 e versioni successive, un client WCF utilizza sia i certificati intermedi presenti nel proprio archivio certificati che quelli ricevuti durante la negoziazione SSL per eseguire la convalida della catena di certificati sul certificato del servizio. In .NET Framework 3.0 vengono utilizzati solo i certificati intermedi installati nell'archivio certificati locale.

ms729700.Warning(it-it,VS.100).gif Attenzione:
Quando viene utilizzata la sicurezza del trasporto, è possibile che la proprietà CurrentPrincipal venga sovrascritta. Per impedire che si verifichi questa condizione, impostare PrincipalPermission su None. ServiceAuthorizationBehavior è un comportamento del servizio che può essere impostato sulla descrizione del servizio stesso.

BasicHttpBinding

Per impostazione predefinita, la classe BasicHttpBinding non fornisce sicurezza. Questa associazione è progettata per essere interoperabile con i provider di servizi Web che non implementano funzionalità di sicurezza. La sicurezza può essere tuttavia attivata impostando la proprietà Mode su qualsiasi valore diverso da None. Per abilitare la sicurezza del trasporto, impostare tale proprietà su Transport.

Interazione con IIS

La classe BasicHttpBinding viene utilizzata principalmente per interagire con i servizi Web esistenti, molti dei quali sono ospitati da Internet Information Services (IIS). Di conseguenza, la sicurezza del trasporto per questa associazione è progettata per interagire senza difficoltà con i siti IIS. Questo risultato si ottiene impostando la modalità di sicurezza su Transport e quindi specificando il tipo di credenziale client. I valori relativi al tipo di credenziale corrispondono ai meccanismi di sicurezza directory ISS. Nel codice seguente viene illustrata l'impostazione della modalità e del tipo di credenziale su Windows. È possibile utilizzare questa configurazione quando il client e il server si trovano nello stesso dominio Windows.

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

oppure in configurazione:

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

Nelle sezioni seguenti vengono illustrati altri tipi di credenziali client.

Di base

Questo tipo corrisponde al metodo di autenticazione di base di IIS. Quando si utilizza questa modalità, il server IIS deve essere configurato con gli account utente di Windows e le autorizzazioni del file system NTFS appropriate. Per ulteriori informazioni su IIS 6.0, vedere Abilitazione dell'autenticazione di base e configurazione del nome dell'area di autenticazione. Per ulteriori informazioni su IIS 7.0, vedere IIS 7.0 Beta: configurazione dell'autenticazione di base (la pagina potrebbe essere in inglese).

Certificato

In IIS è disponibile un'opzione affinché i client debbano eseguire l'accesso con un certificato. Questa funzionalità consente inoltre di eseguire il mapping di un certificato client a un account di Windows. Per ulteriori informazioni su IIS 6.0, vedere Abilitazione dei certificati in IIS 6.0. Per ulteriori informazioni su IIS 7.0, vedere IIS 7.0 Beta: configurazione dei certificati server in IIS 7.0 (la pagina potrebbe essere in inglese).

Digest

L'autenticazione digest è simile all'autenticazione di base, ma offre il vantaggio di inviare le credenziali come un hash, anziché in testo non crittografato. Per ulteriori informazioni su IIS 6.0, vedere Autenticazione digest in IIS 6.0 (la pagina potrebbe essere in inglese). Per ulteriori informazioni su IIS 7.0, vedere IIS 7.0 Beta: configurazione dell'autenticazione digest (la pagina potrebbe essere in inglese).

Windows

Questo tipo corrisponde al metodo di autenticazione integrata di Windows di IIS. In caso di impostazione su questo valore, si prevede inoltre che il server sia in un dominio Windows che utilizza il protocollo Kerberos come controller di dominio. Se il server non è in un dominio con supporto Kerberos o se il sistema Kerberos ha esito negativo, è possibile utilizzare il valore NTLM (NT LAN Manager) descritto nella sezione successiva. Per ulteriori informazioni su IIS 6.0, vedere Autenticazione integrata di Windows n IIS 6.0. Per ulteriori informazioni su IIS 7.0, vedere IIS 7.0 Beta: configurazione dei certificati server in IIS 7.0 (la pagina potrebbe essere in inglese).

NTLM

Consente al server di utilizzare NTLM per l'autenticazione se il protocollo Kerberos ha esito negativo. Per ulteriori informazioni su configurazione di IIS in IIS 6.0, vedere Esecuzione forzata dell'autenticazione NTLM (la pagina potrebbe essere in inglese). Per IIS 7.0, l'autenticazione di Windows include l'autenticazione NTLM. Per ulteriori informazioni, vedere IIS 7.0 Beta: configurazione dei certificati server in IIS 7.0 (la pagina potrebbe essere in inglese).

WsHttpBinding

La classe WSHttpBinding è progettata per essere interoperabile con i servizi che implementano le specifiche WS - *. La sicurezza basata sul trasporto di questa associazione è SSL (Secure Sockets Layer) su HTTP, ovvero HTTPS. Per creare un'applicazione WCF che utilizza SSL, utilizzare IIS per ospitarla. In alternativa, se si sta creando un'applicazione indipendente, utilizzare lo strumento HttpCfg.exe per associare un certificato X.509 a una porta specifica in un computer. Il numero della porta viene specificato all'interno dell'applicazione WCF come indirizzo dell'endpoint. Quando si utilizza la modalità di trasporto, l'indirizzo dell'endpoint deve includere il protocollo HTTPS; in caso contrario verrà generata un'eccezione in fase di esecuzione. Per ulteriori informazioni, vedere Protezione del trasporto HTTP.

L'autenticazione client, impostare la proprietà ClientCredentialType della classe HttpTransportSecurity su uno dei valori di enumerazione di HttpClientCredentialType. I valori di enumerazione corrispondono ai tipi di credenziali client per BasicHttpBinding e sono progettati per essere ospitati nei servizi IIS.

Nell'esempio seguente viene illustrata l'associazione utilizzata con un tipo di credenziale client di 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
// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;

WSDualHttpBinding

Questa associazione fornisce sicurezza solo a livello di messaggio, non a livello di trasporto.

NetTcpBinding

La classe NetTcpBinding utilizza il protocollo TCP per il trasporto dei messaggi. La sicurezza per la modalità di trasporto viene fornita implementando il protocollo TLS (Transport Layer Security) su TCP. L'implementazione di TLS viene fornita dal sistema operativo.

È inoltre possibile specificare il tipo di credenziale del client impostando la proprietà ClientCredentialType della classe TcpTransportSecurity su uno dei valori di TcpClientCredentialType, come illustrato nel codice seguente.

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

Client

Sul client è necessario specificare un certificato utilizzando il metodo SetCertificate della classe X509CertificateInitiatorClientCredential.

ms729700.note(it-it,VS.100).gifNota:
Se si utilizza la sicurezza di Windows, non è necessario un certificato.

Nel codice seguente viene utilizzata l'identificazione digitale del certificato che lo identifica in modo univoco. Per ulteriori informazioni su certificati, vedere Utilizzo dei certificati.

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

In alternativa, specificare il certificato nella configurazione del client utilizzando un elemento <clientCredentials> nella sezione dei comportamenti.

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

NetNamedPipeBinding

La classe NetNamedPipeBinding è progettata per consentire una comunicazione efficiente intra-computer, ovvero per i processi in esecuzione sullo stesso computer, sebbene sia possibile creare canali named pipe tra due computer sulla stessa rete. Questa associazione fornisce sicurezza solo a livello di trasporto. Quando si creano applicazioni utilizzando questa associazione, gli indirizzi di endpoint devono includere "net.pipe" come protocollo.

WSFederationHttpBinding

Quando si utilizza la sicurezza del trasporto, questa associazione utilizza SSL su HTTP, noto come HTTPS, con un token emesso (TransportWithMessageCredential). Per ulteriori informazioni su applicazioni federate, vedere Federazione e token emessi.

NetPeerTcpBinding

La classe NetPeerTcpBinding costituisce un trasporto protetto progettato per consentire una comunicazione efficiente utilizzando la funzionalità di rete peer-to-peer. Come indicato dal nome della classe e dell'associazione, il protocollo è TCP. Quando la modalità di sicurezza è impostata sul trasporto, l'associazione implementa TLS su TCP. Per ulteriori informazioni su funzionalità peer-to-peer, vedere Rete peer-to-peer.

MsmqIntegrationBinding e NetMsmqBinding

Per informazioni dettagliate sulla sicurezza del trasporto con accodamento dei messaggi (precedentemente chiamato MSMQ), vedere Protezione dei messaggi mediante protezione del trasporto.

Vedere anche

Concetti

Programmazione delle funzionalità di sicurezza di WCF