Procedura: modificare il provider di crittografia per la chiave privata di un certificato X.509

In questo argomento viene illustrato come modificare il provider di crittografia utilizzato per fornire la chiave privata di un certificato X.509 e come integrare il provider nel framework di protezione di Windows Communication Foundation (WCF). Per ulteriori informazioni sull'utilizzo dei certificati, vedere Utilizzo dei certificati.

Il framework di protezione di WCF offre la possibilità di introdurre nuovi tipi di token di protezione come descritto in Procedura: creare un token personalizzato. È anche possibile utilizzare un token personalizzato per sostituire tipi di token esistenti forniti dal sistema.

In questo argomento, il token di protezione X.509 fornito dal sistema viene sostituito da un token X.509 personalizzato che prevede un'implementazione diversa per la chiave privata del certificato. Ciò è utile negli scenari in cui l'effettiva chiave privata viene fornita da un provider di crittografia diverso rispetto a quello predefinito di Windows. Un esempio di provider di crittografia alternativo è un modulo di protezione hardware che esegue tutte le operazioni di crittografia relative alla chiave privata e non archivia le chiavi private in memoria, migliorando così la protezione del sistema.

L'esempio seguente è solo per scopi dimostrativi. Il provider di crittografia di Windows predefinito non viene sostituito, bensì indica dove è possibile integrare tale provider.

Procedure

Ogni token di protezione a cui sono associate una o più chiavi di protezione deve implementare la proprietà SecurityKeys che restituisce un insieme di chiavi dall'istanza del token di protezione. Se il token è un token di protezione X.509, l'insieme contiene una sola istanza della classe X509AsymmetricSecurityKey che rappresenta sia la chiave pubblica che la chiave privata associata al certificato. Per sostituire il provider di crittografia predefinito utilizzato per fornire le chiavi del certificato, creare una nuova implementazione di questa classe.

Per creare una chiave asimmetrica X.509 personalizzata

  1. Definire una nuova classe derivata dalla classe X509AsymmetricSecurityKey.

  2. Eseguire l'override della proprietà di sola lettura KeySize. Questa proprietà restituisce le dimensioni effettive della chiave nella coppia di chiavi pubblica/privata del certificato.

  3. Eseguire l'override del metodo DecryptKey. Questo metodo viene chiamato dal framework di protezione di WCF per decifrare una chiave simmetrica con la chiave privata del certificato (la chiave precedentemente crittografata con la chiave pubblica del certificato).

  4. Eseguire l'override del metodo GetAsymmetricAlgorithm. Questo metodo viene chiamato dal framework della protezione di WCF per ottenere un'istanza della classe AsymmetricAlgorithm che rappresenta il provider di crittografia per la chiave pubblica o privata del certificato, a seconda dei parametri passati al metodo.

  5. Facoltativo. Eseguire l'override del metodo GetHashAlgorithmForSignature. Eseguire l'override di questo metodo se è richiesta un'implementazione diversa della classe HashAlgorithm.

  6. Eseguire l'override del metodo GetSignatureFormatter. Questo metodo restituisce un'istanza della classe AsymmetricSignatureFormatter associata alla chiave privata del certificato.

  7. Eseguire l'override del metodo IsSupportedAlgorithm. Questo metodo viene utilizzato per indicare se un particolare algoritmo di crittografia è supportato dall'implementazione della chiave di protezione.

Nella procedura seguente viene illustrato come integrare l'implementazione della chiave di protezione asimmetrica X.509 personalizzata creata nella procedura precedente con il framework di protezione di WCF per sostituire il token di protezione X.509 fornito dal sistema.

Per sostituire il token di protezione X.509 fornito dal sistema con una chiave di protezione asimmetrica X.509 personalizzata

  1. Creare un token di protezione X.509 personalizzato che restituisce la chiave di protezione asimmetrica X.509 personalizzata anziché la chiave di protezione fornita dal sistema, come illustrato nell'esempio seguente. Per ulteriori informazioni sui token di protezione personalizzati, vedere Procedura: creare un token personalizzato.

  2. Creare un provider del token di protezione personalizzato che restituisca un token di protezione X.509 personalizzato, come illustrato nell'esempio. Per ulteriori informazioni sulla creazione di provider del token di protezione personalizzati, vedere Procedura: creare un provider di token di protezione personalizzati.

  3. Se è necessario utilizzare la chiave di protezione personalizzata sul lato dell'iniziatore, creare un gestore del token di protezione client personalizzato e classi delle credenziali client personalizzate, come illustrato nell'esempio seguente. Per ulteriori informazioni sulle credenziali client personalizzate e sui gestori dei token di protezione client, vedere Procedura: creare credenziali client e del servizio personalizzate.

  4. Se è necessario utilizzare la chiave di protezione personalizzata sul lato del destinatario, creare un gestore del token di protezione del servizio personalizzato e credenziali del servizio personalizzate, come illustrato nell'esempio seguente. Per ulteriori informazioni sulle credenziali del servizio personalizzate e sui gestori dei token di protezione del servizio, vedere Procedura: creare credenziali client e del servizio personalizzate.

Vedere anche

Attività

Procedura: creare un provider di token di protezione personalizzati

Riferimenti

X509AsymmetricSecurityKey
AsymmetricSecurityKey
SecurityKey
AsymmetricAlgorithm
HashAlgorithm
AsymmetricSignatureFormatter

Concetti

Procedura: creare credenziali client e del servizio personalizzate
Procedura: creare un autenticatore del token di protezione personalizzato
Procedura: creare un token personalizzato
Architettura della protezione