Procedura: proteggere endpoint dei metadati

È possibile che i metadati di un servizio contengano informazioni riservate sull'applicazione che un utente malintenzionato potrebbe sfruttare. Gli utenti del servizio, inoltre, potrebbero richiedere un meccanismo protetto per ottenere metadati sul servizio. È talvolta necessario, quindi, pubblicare i metadati utilizzando un endpoint protetto.

Gli endpoint dei metadati vengono generalmente protetti utilizzando i meccanismi di protezione standard definiti in Windows Communication Foundation (WCF) per la protezione degli endpoint dell'applicazione. (Per ulteriori informazioni, vedere Cenni preliminari sulla protezione.)

In questo argomento vengono esaminati i passaggi che consentono di creare un endpoint protetto mediante un certificato SSL (Secure Sockets Layer) o, in altri termini, un endpoint HTTPS.

Per creare un endpoint di metadati HTTPS GET protetto nel codice

  1. Configurare una porta con un certificato X.509 appropriato. Il certificato deve provenire da un'autorità attendibile e deve presentare l'utilizzo previsto "autorizzazione del servizio". È necessario utilizzare lo strumento HttpCfg.exe per allegare il certificato alla porta. Vedere Procedura: configurare una porta con un certificato SSL.

    Nota

    Il soggetto del certificato o il DNS (Domain Name System) deve corrispondere al nome del computer. È fondamentale perché uno dei primi passaggi eseguiti dal meccanismo HTTPS consiste nel verificare che il certificato sia emesso allo stesso URI (Uniform Resource Identifier) dell'indirizzo dal quale è richiamato.

  2. Creare una nuova istanza della classe ServiceMetadataBehavior.

  3. Impostare la proprietà HttpsGetEnabled della classe ServiceMetadataBehavior su true.

  4. Impostare la proprietà HttpsGetUrl su un URL appropriato. Se si specifica un indirizzo assoluto, l'URL deve iniziare con lo schema "https://". Se si specifica un indirizzo relativo, è necessario fornire un indirizzo di base HTTPS per l'host del servizio. Se questa proprietà non è impostata, l'indirizzo predefinito è "" o direttamente l'indirizzo di base HTTPS per il servizio.

  5. Aggiungere l'istanza all'insieme di comportamenti restituito dalla proprietà Behaviors della classe ServiceDescription, come indicato nel codice seguente.

Per creare un endpoint di metadati HTTPS GET protetto nella configurazione

  1. Aggiungere un elemento <behaviors> all'elemento <system.ServiceModel> del file di configurazione del servizio.

  2. Aggiungere un elemento <serviceBehaviors> all'elemento <Behaviors>.

  3. Aggiungere un elemento <behavior> of <serviceBehaviors> all'elemento <serviceBehaviors>.

  4. Impostare l'attributo name dell'elemento <behavior> su un valore appropriato. L'attributo name è obbligatorio. Nell'esempio seguente viene utilizzato il valore mySvcBehavior.

  5. Aggiungere <serviceMetadata> Element all'elemento <behavior>.

  6. Impostare l'attributo httpsGetEnabled dell'elemento <serviceMetadata> su true.

  7. Impostare l'attributo httpsGetUrl dell'elemento <serviceMetadata> su un valore appropriato. Se si specifica un indirizzo assoluto, l'URL deve iniziare con lo schema "https://". Se si specifica un indirizzo relativo, è necessario fornire un indirizzo di base HTTPS per l'host del servizio. Se questa proprietà non è impostata, l'indirizzo predefinito è "" o direttamente l'indirizzo di base HTTPS per il servizio.

  8. Per utilizzare il comportamento con un servizio, impostare l'attributo behaviorConfiguration dell'elemento <service> sul valore dell'attributo Name dell'elemento Behaviour. Nella configurazione seguente viene illustrato un esempio completo.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
     <system.serviceModel>
      <behaviors>
       <serviceBehaviors>
        <behavior name="mySvcBehavior">
         <serviceMetadata httpsGetEnabled="true" 
              httpsGetUrl="https://localhost:8036/calcMetadata" />
        </behavior>
       </serviceBehaviors>
      </behaviors>
     <services>
      <service behaviorConfiguration="mySvcBehavior" 
            name="Microsoft.Security.Samples.Calculator">
       <endpoint address="https://localhost:8037/ServiceModelSamples/calculator"
       binding="wsHttpBinding" bindingConfiguration=""   
       contract="Microsoft.Security.Samples.ICalculator" />
      </service>
     </services>
    </system.serviceModel>
    </configuration>
    

Esempio

Nell'esempio seguente viene creata un'istanza della classe ServiceHost e viene aggiunto un endpoint. Il codice crea quindi un'istanza della classe ServiceMetadataBehavior e imposta le proprietà per creare un punto dello scambio di metadati protetto.

Compilazione del codice

Nel codice di esempio vengono utilizzati gli spazi dei nomi seguenti:

Vedere anche

Attività

Procedura: configurare una porta con un certificato SSL

Riferimenti

HttpsGetEnabled
ServiceMetadataBehavior
HttpsGetUrl

Concetti

Utilizzo dei certificati
Considerazioni sulla protezione con metadati

Altre risorse

Protezione di servizi e client