Unterschiede bei der Zertifikatsvalidierung zwischen HTTPS, SSL über TCP und SOAP-Sicherheit

Sie können in Windows Communication Foundation (WCF) Zertifikate mit Sicherheit (SOAP) auf Nachrichtenebene neben der Transport Layer Security (TLS) über HTTP (HTTPS) oder TCP verwenden.In diesem Thema werden die Unterschiede bei der Überprüfung solcher Zertifikate beschrieben.

Überprüfung der HTTPS-Clientzertifikate

Wenn Sie HTTPS zur Kommunikation zwischen einem Client und einem Dienst verwenden, muss das Zertifikat, das der Client zur Authentifizierung für den Dienst verwendet, Vertrauensketten unterstützen.Es muss eine Verkettung zu einer vertrauenswerten Stammzertifizierungsstelle herstellen,anderenfalls gibt die HTTP-Ebene eine WebException mit der Meldung "Der Remoteserver hat einen Fehler zurückgegeben: (403) Unzulässig" aus. WCF gibt diese Ausnahme als MessageSecurityException aus.

Validierung der HTTPS-Dienstzertifikate

Wenn Sie HTTPS zur Kommunikation zwischen einem Client und einem Dienst verwenden, muss das Zertifikat, mit dem der Server die Authentifizierung durchführt, standardmäßig Vertrauensketten unterstützen.Es muss eine Verkettung zu einer vertrauenswerten Stammzertifizierungsstelle herstellen,Es wird keine Online-Überprüfung durchgeführt, um herauszufinden, ob das Zertifikat widerrufen wurde.Sie können dieses Verhalten auch überschreiben, indem Sie einen RemoteCertificateValidationCallback-Rückruf registrieren, wie mit dem nachfolgenden Code dargestellt.

ServicePointManager.ServerCertificateValidationCallback +=
    new RemoteCertificateValidationCallback(ValidateServerCertificate);

Die Signatur für ValidateServerCertificate sieht folgendermaßen aus:

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

Durch die Implementierung des ValidateServerCertificate können beliebige Überprüfungen durchgeführt werden, die der Entwickler der Clientanwendung für notwendig erachtet, um das Dienstzertifikat zu überprüfen.

Validierung der Clientzertifikate in SSL-über-TCP-Sicherheit oder SOAP-Sicherheit

Wenn Sie Secure Sockets Layer (SSL) über TCP oder die Nachrichtensicherheit (SOAP) verwenden, werden Clientzertifikate anhand des CertificateValidationMode-Eigenschaftswerts der X509ClientCertificateAuthentication-Klasse überprüft.Die Eigenschaft wird auf einen der X509CertificateValidationMode-Werte festgelegt.Die Sperrüberprüfung kann anhand der Werte des RevocationMode-Eigenschaftswerts der X509ClientCertificateAuthentication-Klasse durchgeführt werden.Die Eigenschaft wird auf einen der X509RevocationMode-Werte festgelegt.

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

Validierung der Dienstzertifikate in SSL-über-TCP-Sicherheit und SOAP-Sicherheit

Wenn Sie SSL über TCP oder die (SOAP)-Nachrichtensicherheit verwenden, werden Dienstzertifikate anhand des CertificateValidationMode-Eigenschaftswerts der X509ServiceCertificateAuthentication-Klasse überprüft.Die Eigenschaft wird auf einen der X509CertificateValidationMode-Werte festgelegt.

Die Sperrüberprüfung kann anhand der Werte des RevocationMode-Eigenschaftswerts der X509ServiceCertificateAuthentication-Klasse durchgeführt werden.Die Eigenschaft wird auf einen der X509RevocationMode-Werte festgelegt.

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

Siehe auch

RemoteCertificateValidationCallback
Verwenden von Zertifikaten