Procedura: utilizzare le funzionalità di protezione a livello di trasporto e le credenziali a livello di messaggio

L'utilizzo integrato delle funzionalità di protezione a livello di trasporto e delle credenziali a livello di messaggio consente di sfruttare le migliori funzionalità delle modalità di protezione a livello di trasporto e di messaggio di Windows Communication Foundation (WCF). Complessivamente, le funzionalità di protezione a livello di trasporto garantiscono integrità e riservatezza, mentre le funzionalità di protezione a livello di messaggio offrono vari tipi di credenziali non disponibili quando si utilizzano meccanismi di protezione basati esclusivamente sul livello di trasporto. In questo argomento vengono illustrati i passaggi di base per utilizzare le associazioni WSHttpBinding e NetTcpBinding allo scopo di implementare un meccanismo di protezione basato sull'integrazione fra le funzionalità di protezione a livello di trasporto e le credenziali a livello di messaggio. Per ulteriori informazioni sull'impostazione della modalità di protezione, vedere Procedura: impostare la modalità di protezione.

Quando si imposta la modalità di protezione su TransportWithMessageCredential, il trasporto determina il meccanismo di protezione a livello di trasporto effettivamente utilizzato. Nel caso del protocollo HTTP, il meccanismo è Secure Sockets Layer (SSL) su HTTP (HTTPS). Nel caso del protocollo TCP, invece, il meccanismo è SSL su TCP oppure Windows.

Se il trasporto è HTTP (tramite l'associazione WSHttpBinding), il protocollo HTTPS fornisce la protezione a livello di trasporto. In tal caso è necessario configurare il computer che ospita il servizio con un certificato SSL associato a una porta, come mostrato in seguito in questo argomento.

Se il trasporto è TCP (tramite l'associazione NetTcpBinding), per impostazione predefinita la protezione a livello di trasporto fornita è la protezione di Windows oppure SSL su TCP. Quando si utilizza SSL su TCP è necessario utilizzare il metodo SetCertificate per specificare il certificato, come mostrato in seguito in questo argomento.

Per utilizzare l'associazione WSHttpBinding con un certificato allo scopo di fornire la protezione a livello di trasporto (in codice)

  1. Utilizzare lo strumento HttpCfg.exe per associare un certificato SSL a una porta del computer. Per ulteriori informazioni, vedere Procedura: configurare una porta con un certificato SSL.

  2. Creare un'istanza della classe WSHttpBinding e impostare la proprietà Mode su TransportWithMessageCredential.

  3. Impostare la proprietà ClientCredentialType su un valore appropriato. (Per ulteriori informazioni, vedere Selezione di un tipo di credenziale.) Nel codice seguente viene utilizzato il valore Certificate.

  4. Creare un'istanza della classe Uri con un indirizzo di base appropriato. Si noti che l'indirizzo deve utilizzare lo schema "HTTPS" e deve contenere il nome effettivo del computer e il numero della porta a cui il certificato SSL è associato. In alternativa è possibile impostare l'indirizzo di base in configurazione.

  5. Aggiungere un endpoint di servizio tramite il metodo AddServiceEndpoint.

  6. Creare l'istanza della classe ServiceHost e chiamare il metodo Open, come mostrato nel codice seguente.

Per utilizzare l'associazione NetTcpBinding con un certificato allo scopo di fornire la protezione a livello di trasporto (in codice)

  1. Creare un'istanza della classe NetTcpBinding e impostare la proprietà Mode su TransportWithMessageCredential.

  2. Impostare la proprietà ClientCredentialType su un valore appropriato. Nel codice seguente viene utilizzato il valore Certificate.

  3. Creare un'istanza della classe Uri con un indirizzo di base appropriato. Si noti che l'indirizzo deve utilizzare lo schema "net.tcp". In alternativa è possibile impostare l'indirizzo di base in configurazione.

  4. Creare l'istanza della classe ServiceHost.

  5. Utilizzare il metodo SetCertificate della classe X509CertificateRecipientServiceCredential per impostare in modo esplicito il certificato X.509 del servizio.

  6. Aggiungere un endpoint di servizio tramite il metodo AddServiceEndpoint.

  7. Chiamare il metodo Open, come mostrato nel codice seguente.

Per utilizzare l'associazione NetTcpBinding con Windows allo scopo di fornire la protezione a livello di trasporto (in codice)

  1. Creare un'istanza della classe NetTcpBinding e impostare la proprietà Mode su TransportWithMessageCredential.

  2. Impostare la protezione a livello di trasporto in modo che utilizzi Windows. A tale scopo, impostare la proprietà ClientCredentialType su Windows. Si noti che questo valore è l'impostazione predefinita.

  3. Impostare la proprietà ClientCredentialType su un valore appropriato. Nel codice seguente viene utilizzato il valore Certificate.

  4. Creare un'istanza della classe Uri con un indirizzo di base appropriato. Si noti che l'indirizzo deve utilizzare lo schema "net.tcp". In alternativa è possibile impostare l'indirizzo di base in configurazione.

  5. Creare l'istanza della classe ServiceHost.

  6. Utilizzare il metodo SetCertificate della classe X509CertificateRecipientServiceCredential per impostare in modo esplicito il certificato X.509 del servizio.

  7. Aggiungere un endpoint di servizio tramite il metodo AddServiceEndpoint.

  8. Chiamare il metodo Open, come mostrato nel codice seguente.

Utilizzo della configurazione

Per utilizzare l'associazione WSHttpBinding

  1. Configurare il computer con un certificato SSL associato a una porta. (Per ulteriori informazioni, vedere Procedura: configurare una porta con un certificato SSL). In questa operazione di configurazione non è necessario impostare l'elemento <transport>.

  2. Specificare il tipo di credenziale client della protezione a livello di messaggio. Nell'esempio seguente l'attributo clientCredentialType dell'elemento <message> viene impostato su UserName.

    <wsHttpBinding>
    <binding name="WsHttpBinding_ICalculator">
            <security mode="TransportWithMessageCredential" >
               <message clientCredentialType="UserName" />
            </security>
    </binding>
    </wsHttpBinding>
    

Per utilizzare l'associazione NetTcpBinding con un certificato allo scopo di fornire la protezione a livello di trasporto

  1. Nel caso di SSL su TCP occorre specificare in modo esplicito il certificato nell'elemento <behaviors>. Nell'esempio seguente viene individuato un certificato in base alla relativa autorità emittente nel percorso di archivio predefinito (archivio locale del computer e archivio personale).

    <behaviors>
     <serviceBehaviors>
       <behavior name="mySvcBehavior">
           <serviceCredentials>
             <serviceCertificate findValue="contoso.com"
                                 x509FindType="FindByIssuerName" />
           </serviceCredentials>
       </behavior>
     </serviceBehaviors>
    </behaviors>
    
  2. Aggiungere un netTcpBinding Element alla sezione delle associazioni.

  3. Aggiungere un elemento di associazione e quindi impostare l'attributo name su un valore appropriato.

  4. Aggiungere un elemento <security> e quindi impostare l'attributo mode su TransportWithMessageCredential.

  5. Aggiungere un elemento <message> e impostare l'attributo clientCredentialType su un valore appropriato.

    <bindings>
    <netTcpBinding>
      <binding name="myTcpBinding">
        <security mode="TransportWithMessageCredential" >
           <message clientCredentialType="Windows" />
        </security>
      </binding>
    </netTcpBinding>
    </bindings>
    

Per utilizzare l'associazione NetTcpBinding con Windows allo scopo di fornire la protezione a livello di trasporto

  1. Aggiungere un netTcpBinding Element alla sezione delle associazioni.

  2. Aggiungere un elemento <binding> e impostare l'attributo name su un valore appropriato.

  3. Aggiungere un elemento <security> e quindi impostare l'attributo mode su TransportWithMessageCredential.

  4. Aggiungere un elemento <transport> e quindi impostare l'attributo clientCredentialType su Windows.

  5. Aggiungere un elemento <message> e impostare l'attributo clientCredentialType su un valore appropriato. Nel codice seguente il valore viene impostato su un certificato.

    <bindings>
    <netTcpBinding>
      <binding name="myTcpBinding">
        <security mode="TransportWithMessageCredential" >
           <transport clientCredentialType="Windows" />
           <message clientCredentialType="Certificate" />
        </security>
      </binding>
    </netTcpBinding>
    </bindings>
    

Vedere anche

Attività

Procedura: impostare la modalità di protezione

Concetti

Protezione dei servizi

Altre risorse

Protezione di servizi e client