Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Differenze di convalida del certificato tra HTTPS, SSL su TCP e protezione SOAP

 

Oltre alla protezione a livello di trasporto (TSP) su HTTP (HTTPS) o TCP, in Windows Communication Foundation (WCF) è possibile utilizzare certificati con la protezione a livello dei messaggi (SOAP).In questo argomento vengono descritte le differenze nella modalità di convalida dei certificati.

In caso di utilizzo di HTTPS per la comunicazione tra un client e un servizio, il certificato utilizzato dal client per autenticare il servizio deve supportare la catena di certificati,ovvero deve concatenarsi a un'Autorità di certificazione radice attendibile.In caso contrario, il livello HTTP genera un'eccezione WebException con il messaggio "Errore del server remoto: (403) non consentito". In WCF questa eccezione assume la forma di MessageSecurityException.

In caso di utilizzo di HTTPS per la comunicazione tra un client e un servizio, il certificato autenticato dal server deve supportare la catena di certificati per impostazione predefinita,ovvero deve concatenarsi a un'Autorità di certificazione radice attendibile.Non viene eseguito alcun controllo in linea per appurare se il certificato è stato revocato.È possibile eseguire l'override di questo comportamento registrando un callback RemoteCertificateValidationCallback, come illustrato nel codice seguente.

ServicePointManager.ServerCertificateValidationCallback +=
    new RemoteCertificateValidationCallback(ValidateServerCertificate);

dove la firma per ValidateServerCertificate è come segue:

public static bool ValidateServerCertificate(
  object sender,
  X509Certificate certificate,
  X509Chain chain,
  SslPolicyErrors sslPolicyErrors)

L'implementazione di ValidateServerCertificate può eseguire qualsiasi controllo che lo sviluppatore dell'applicazione client ritenga necessario per convalidare il certificato del servizio.

Quando si utilizza SSL (Secure Sockets Layer) su TCP o la protezione dei messaggi (SOAP), i certificati client vengono convalidati secondo il valore della proprietà CertificateValidationMode della classe X509ClientCertificateAuthentication.La proprietà è impostata su uno dei valori X509CertificateValidationMode.La verifica della revoca viene eseguita secondo i valori del valore della proprietà RevocationMode della classe X509ClientCertificateAuthentication.La proprietà è impostata su uno dei valori X509RevocationMode.

myServiceHost.Credentials.ClientCertificate.Authentication.
    CertificateValidationMode=
    X509CertificateValidationMode.PeerOrChainTrust;       

myServiceHost.Credentials.ClientCertificate.Authentication.
    RevocationMode=X509RevocationMode.Offline; 

Quando si utilizza SSL su TCP o la protezione dei messaggi (SOAP), i certificati del servizio vengono convalidati secondo il valore della proprietà CertificateValidationMode della classe X509ServiceCertificateAuthentication.La proprietà è impostata su uno dei valori X509CertificateValidationMode.

La verifica della revoca viene eseguita secondo i valori del valore della proprietà RevocationMode della classe X509ServiceCertificateAuthentication.La proprietà è impostata su uno dei valori X509RevocationMode.

myClient.ClientCredentials.ServiceCertificate.
    Authentication.CertificateValidationMode=
    X509CertificateValidationMode.PeerOrChainTrust;
myClient.ClientCredentials.ServiceCertificate.Authentication.
    RevocationMode = X509RevocationMode.Offline;
Mostra: