Différences de validation des certificats entre HTTPS, SSL sur TCP et la sécurité SOAP

Vous pouvez utiliser dans Windows Communication Foundation (WCF) des certificats avec sécurité (SOAP) de couche message en plus de la sécurité de couche transport (TLS) sur les protocoles HTTP (HTTPS) ou TCP. Cette rubrique décrit les différences dans la façon dont ces certificats sont validés.

Validation des certificats clients HTTPS

Lors de l'utilisation du protocole HTTPS pour communiquer entre un client et un service, le certificat que le client utilise pour s'authentifier auprès du service doit prendre en charge l'approbation de chaîne. Autrement dit, il doit être chaîné à une autorité de certification racine approuvée. Dans le cas contraire, la couche HTTP lève une exception WebException avec le message « Le serveur distant a retourné une erreur : (403) Interdit ». WCF affiche cette exception en tant que MessageSecurityException.

Validation des certificats de service HTTPS

Lors de l'utilisation du protocole HTTPS pour communiquer entre un client et un service, le certificat avec lequel le serveur effectue l'authentification doit prendre en charge l'approbation de chaîne par défaut. Autrement dit, il doit être chaîné à une autorité de certification racine approuvée. Aucun contrôle en ligne n'est effectué pour voir si le certificat a été révoqué. Vous pouvez compenser ce comportement en enregistrant un rappel RemoteCertificateValidationCallback, comme illustré dans le code ci-dessous.

ServicePointManager.ServerCertificateValidationCallback +=
    new RemoteCertificateValidationCallback(ValidateServerCertificate);
ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateServerCertificate)

où la signature pour ValidateServerCertificate est comme suit :

public static bool ValidateServerCertificate(
  object sender,
  X509Certificate certificate,
  X509Chain chain,
  SslPolicyErrors sslPolicyErrors)
Public Shared Function ValidateServerCertificate(ByVal sender As Object, _
                                                 ByVal certificate As X509Certificate, _
                                                 ByVal chain As X509Chain, _
                                                 ByVal sslPolicyErrors As SslPolicyErrors) As Boolean

L'implémentation de ValidateServerCertificate peut effectuer toutes les vérifications que le développeur d'une application cliente juge nécessaires pour valider le certificat de service.

Validation de certificats clients dans SSL sur TCP ou la sécurité SOAP

Lors de l'utilisation du protocole SSL (Secure Sockets Layer) sur TCP ou de la sécurité (SOAP) de message, les certificats clients sont validés en fonction de la valeur de propriété CertificateValidationMode de la classe X509ClientCertificateAuthentication. La propriété a l'une des valeurs X509CertificateValidationMode. La vérification de la révocation est effectuée en fonction des valeurs de la valeur de propriété RevocationMode de la classe X509ClientCertificateAuthentication. La propriété a l'une des valeurs X509RevocationMode.

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

myServiceHost.Credentials.ClientCertificate.Authentication.
    RevocationMode=X509RevocationMode.Offline;
With myServiceHost.Credentials.ClientCertificate.Authentication
    .CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust
    .RevocationMode = X509RevocationMode.Offline
End With

Validation d’un certificat de service dans SSL sur TCP et la sécurité SOAP

Lors de l'utilisation du protocole SSL sur TCP ou de la sécurité de message (SOAP), les certificats de service sont validés en fonction de la valeur de propriété CertificateValidationMode de la classe X509ServiceCertificateAuthentication. La propriété a l'une des valeurs X509CertificateValidationMode.

La vérification de la révocation est effectuée en fonction des valeurs de la valeur de propriété RevocationMode de la classe X509ServiceCertificateAuthentication. La propriété a l'une des valeurs X509RevocationMode.

myClient.ClientCredentials.ServiceCertificate.
    Authentication.CertificateValidationMode=
    X509CertificateValidationMode.PeerOrChainTrust;
myClient.ClientCredentials.ServiceCertificate.Authentication.
    RevocationMode = X509RevocationMode.Offline;
With myClient.ClientCredentials.ServiceCertificate.Authentication
    .CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust
    .RevocationMode = X509RevocationMode.Offline
End With

Voir aussi