Diferencias en la validación de certificados entre HTTPS, SSL a través de TCP, y seguridad SOAP

Puede usar certificados en Windows Communication Foundation (WCF) con seguridad de la capa de mensajes (SOAP) además de la seguridad de la capa de transporte (TLS) a través de HTTP (HTTPS) o TCP. En este tema se describen las diferencias en la manera como se validan tales certificados.

Validación de certificados de cliente HTTPS

Al utilizar HTTPS para comunicarse entre un cliente y un servicio, el certificado que el cliente utiliza para autenticar al servicio debe soportar la confianza de la cadena. Es decir, debe encadenar a una entidad de certificación raíz de confianza. Si no, la capa HTTP inicia una excepción WebException con el mensaje "Error en el servidor remoto: (403) Prohibido". WCF muestra esta excepción como MessageSecurityException.

Validación de certificados de servicio HTTPS

Al utilizar HTTPS para comunicarse entre un cliente y un servicio, el certificado con el que se autentica el servidor debe soportar la confianza de la cadena. Es decir, debe encadenar a una entidad de certificación raíz de confianza. No se realiza ninguna comprobación para ver si se ha revocado el certificado. Puede invalidar este comportamiento registrando una devolución de llamada RemoteCertificateValidationCallback, como se muestra en el código siguiente.

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

donde la firma para ValidateServerCertificate es como sigue:

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

Al implementar ValidateServerCertificate, se puede realizar cualquier comprobación que el programador de la aplicación cliente juzgue necesaria para validar el certificado del servicio.

La validación de certificados de cliente en SSL a través TCP o seguridad SOAP

Al utilizar Capa de sockets seguros (SSL) a través TCP o seguridad de mensajes (SOAP), los certificados de cliente se validan según el valor de propiedad CertificateValidationMode de la clase X509ClientCertificateAuthentication. La propiedad está establecida en uno de los valores X509CertificateValidationMode. La comprobación de la revocación se realiza según los valores del valor de propiedad RevocationMode de la clase X509ClientCertificateAuthentication. La propiedad está establecida en uno de los valores 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

La validación del certificado de servicio en SSL a través TCP y seguridad SOAP

Al utilizar SSL a través de TCP o seguridad de mensajes (SOAP), los certificados de servicio se validan de acuerdo con el valor de propiedad CertificateValidationMode de la clase X509ServiceCertificateAuthentication. La propiedad está establecida en uno de los valores X509CertificateValidationMode.

La comprobación de la revocación se realiza según los valores del valor de propiedad RevocationMode de la clase X509ServiceCertificateAuthentication. La propiedad está establecida en uno de los valores 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

Consulte también