Procedura: utilizzare certificati X.509 separati per la firma e la crittografia

In questo argomento viene illustrato come configurare Windows Communication Foundation (WCF) per utilizzare certificati diversi per la firma e la crittografia dei messaggi sul client e nel servizio.

Per consentire l'utilizzo di certificati separati per la firma e la crittografia, è necessario creare credenziali personalizzate del client o del servizio (o di entrambi) poiché in WCF non viene fornita alcuna API per impostare più certificati client o del servizio. È inoltre necessario specificare un gestore del token di protezione per utilizzare le informazioni di più certificati e creare un provider di token di protezione appropriato per l'utilizzo della chiave specificata e la direzione del messaggio.

Nel diagramma seguente vengono illustrate le principali classi utilizzate, le classi da cui ereditano (contrassegnate da una freccia rivolta verso l'alto) e i tipi restituiti di alcuni metodi e proprietà.

Per ulteriori informazioni sulle credenziali personalizzate, vedere Procedura: creare credenziali client e del servizio personalizzate.

Inoltre, è necessario creare un sistema di verifica dell'identità personalizzato e collegarlo a un elemento di associazione di sicurezza in un'associazione personalizzata. È inoltre necessario utilizzare le credenziali personalizzate anziché quelle predefinite.

Nel diagramma seguente vengono illustrate le classi coinvolte nell'associazione personalizzata e il modo in cui viene collegato il sistema di verifica dell'identità personalizzato. I diversi elementi di associazione coinvolti ereditano tutti da BindingElement. AsymmetricSecurityBindingElement dispone della proprietà LocalClientSecuritySettings che restituisce un'istanza di IdentityVerifier, da cui viene personalizzato MyIdentityVerifier.

Per ulteriori informazioni sulla creazione di un sistema di verifica dell'identità personalizzato, vedere Procedura: creare un verificatore di identità client personalizzato.

Per utilizzare certificati separati per la firma e la crittografia

  1. Definire una nuova classe di credenziali client che eredita dalla classe ClientCredentials. Implementare quattro nuove proprietà per consentire di specificare più certificati: ClientSigningCertificate, ClientEncryptingCertificate, ServiceSigningCertificate e ServiceEncryptingCertificate. Eseguire inoltre l'override del metodo CreateSecurityTokenManager per restituire un'istanza della classe ClientCredentialsSecurityTokenManager personalizzata definita nel passaggio successivo.

  2. Definire un nuovo gestore del token di protezione che eredita dalla classe ClientCredentialsSecurityTokenManager. Eseguire l'override del metodo CreateSecurityTokenProvider per creare un provider di token di protezione appropriato. Il parametro requirement (SecurityTokenRequirement) specifica la direzione del messaggio e l'utilizzo della chiave.

  3. Definire una nuova classe di credenziali del servizio che eredita dalla classe ServiceCredentials. Implementare quattro nuove proprietà per consentire di specificare più certificati: ClientSigningCertificate, ClientEncryptingCertificate, ServiceSigningCertificate e ServiceEncryptingCertificate. Eseguire inoltre l'override del metodo CreateSecurityTokenManager per restituire un'istanza della classe ServiceCredentialsSecurityTokenManager personalizzata definita nel passaggio successivo.

  4. Definire un nuovo gestore del token di protezione del servizio che eredita dalla classe ServiceCredentialsSecurityTokenManager. Eseguire l'override del metodo CreateSecurityTokenProvider per creare un provider di token di protezione appropriato per la direzione del messaggio passato e l'utilizzo della chiave.

Per utilizzare più certificati sul client

  1. Creare un'associazione personalizzata. È necessario che l'elemento di associazione di protezione operi in modalità duplex per consentire ai provider di token di protezione diversi di essere presenti per le richieste e le risposte. A questo scopo, è possibile aggiungere un trasporto con funzionalità duplex o utilizzare la classe CompositeDuplexBindingElement come illustrato nel codice seguente. Collegare l'oggetto IdentityVerifier personalizzato definito nel passaggio successivo all'elemento di associazione di sicurezza. Sostituire le credenziali client predefinite con le credenziali client personalizzate create precedentemente.

  2. Definire un oggetto IdentityVerifier personalizzato. Il servizio possiede più identità poiché vengono utilizzati certificati diversi per crittografare la richiesta e firmare la risposta.

    Nota

    Nell'esempio seguente, il verificatore di identità personalizzato non esegue alcun controllo di identità dell'endpoint a scopo dimostrativo. Non è tuttavia una pratica consigliabile per il codice di produzione.

Per utilizzare più certificati nel servizio

  1. Creare un'associazione personalizzata. È necessario che l'elemento di associazione di protezione operi in modalità duplex per consentire ai provider di token di protezione diversi di essere presenti per le richieste e le risposte. Come per il lato client, utilizzare un trasporto con funzionalità duplex o la classe CompositeDuplexBindingElement come illustrato nel codice seguente. Sostituire le credenziali del servizio predefinite con quelle personalizzate create precedentemente.

Vedere anche

Riferimenti

ClientCredentials
ServiceCredentials
ClientCredentialsSecurityTokenManager
ServiceCredentialsSecurityTokenManager
IdentityVerifier

Concetti

Procedura: creare credenziali client e del servizio personalizzate