Condividi tramite


Protezione del trasporto con autenticazione del certificato

Nello scenario seguente vengono illustrati un client e un servizio Windows Communication Foundation (WCF) protetti da un certificato X.509. Ogni client ha un certificato che può essere utilizzato per l'autenticazione client Secure Sockets Layer (SSL) ed è considerato attendibile dal servizio. In questo esempio viene illustrato un modello di messaggio request/reply.

Per ulteriori informazioni sull'utilizzo di un certificato con un servizio, vedere Utilizzo dei certificati e Procedura: configurare una porta con un certificato SSL.

Trasferimento sicuro tramite i certificati

Caratteristica Descrizione

Modalità di protezione

Trasporto

Interoperabilità

Con servizi e client di servizi Web esistenti.

Autenticazione (server)

Autenticazione (client)

Sì (utilizzando HTTPS)

Sì (utilizzando un certificato)

Integrità

SiÌ

Riservatezza

Transport

HTTPS

Associazione

WSHttpBinding

Servizio

Il codice e la configurazione seguenti devono essere eseguiti in modo indipendente. Eseguire una delle operazioni seguenti:

  • Creare un servizio autonomo utilizzando il codice senza alcuna configurazione.
  • Creare un servizio utilizzando la configurazione fornita, ma non definire alcun endpoint.

Codice

Nel codice seguente viene illustrato come creare un endpoint del servizio che utilizza una protezione del trasporto e un certificato.

Configurazione

Per configurare il servizio, è possibile utilizzare la configurazione seguente anziché il codice:

<bindings>
    <wsHttpBinding>
        <binding name="CertificateWithTransport">
            <security mode="Transport">
                <transport clientCredentialType="Certificate"/>
            </security>
        </binding>
    </wsHttpBinding>
</bindings>
<services>
    <service name="ServiceModel.Calculator" 
             behaviorConfiguration="credentialConfig" >
    <endpoint address=""
              binding="wsHttpBinding"
              bindingConfiguration="CertificateWithTransport" 
              contract="ServiceModel.ICalculator" />
     </service>
</services>
<behaviors>
    <serviceBehaviors>
        <behavior name="credentialConfig">
            <serviceCredentials>
                <clientCertificate trustedStoreLocation="LocalMachine" 
                                   revocationMode="Online"/>
            </serviceCredentials>
        </behavior>
    </serviceBehaviors>
</behaviors>

Client

Il codice e la configurazione seguenti devono essere eseguiti in modo indipendente. Eseguire una delle operazioni seguenti:

  • Creare un client autonomo utilizzando il codice (e il codice client).
  • Creare un client che non definisce alcun indirizzo di endpoint. Utilizzare invece il costruttore client che accetta il nome della configurazione come argomento. Ad esempio:

Codice

Il codice seguente crea il client. L'associazione è configurata per utilizzare la protezione della modalità trasporto, con il trasporto TCP, con il tipo di credenziale client impostato su Windows.

Configurazione

Il codice di configurazione seguente riguarda il client e, analogamente, specifica i valori e il percorso del certificato utilizzati per trovarlo.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="credentialConfiguration">
          <clientCredentials>
            <clientCertificate findValue="Contoso.com"
                      storeLocation="CurrentUser" 
                      x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_ICalculator">
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://machineName/Calculator"
                behaviorConfiguration="credentialConfiguration"
                binding="wsHttpBinding"
                bindingConfiguration="WSHttpBinding_ICalculator"
                contract="ICalculator"
                name="WSHttpBinding_ICalculator" />
    </client>
  </system.serviceModel>
</configuration>

Vedere anche

Concetti

Cenni preliminari sulla protezione