Freigeben über


Unterschiede bei der Zertifikatüberprüfung zwischen HTTPS, SSL über TCP und SOAP-Sicherheit

Sie können Zertifikate in Windows Communication Foundation (WCF) mit SOAP-Sicherheit (Message-Layer) zusätzlich zur Transportebenensicherheit (TLS) über HTTP (HTTPS) oder TCP verwenden. In diesem Thema werden Unterschiede in der Art und Weise beschrieben, wie diese Zertifikate überprüft werden.

Validierung von HTTPS-Clientzertifikaten

Wenn Https für die Kommunikation zwischen einem Client und einem Dienst verwendet wird, muss das Zertifikat, das der Client für die Authentifizierung beim Dienst verwendet, die Vertrauenskette 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 von HTTPS-Dienstzertifikaten

Bei Verwendung von HTTPS für die Kommunikation zwischen einem Client und einem Dienst muss das Zertifikat, mit dem der Server authentifiziert wird, standardmäßig die Kettenvertrauensstellung unterstützen. Es muss eine Verkettung zu einer vertrauenswerten Stammzertifizierungsstelle herstellen, Es wird keine Onlineüberprüfung durchgeführt, um festzustellen, ob das Zertifikat widerrufen wurde. Sie können dieses Verhalten außer Kraft setzen, indem Sie einen RemoteCertificateValidationCallback Rückruf registrieren, wie im folgenden Code gezeigt.

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

wobei die Signatur ValidateServerCertificate wie folgt lautet:

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

Die Implementierung ValidateServerCertificate kann alle Überprüfungen durchführen, die der Clientanwendungsentwickler für die Überprüfung des Dienstzertifikats als erforderlich erachtet.

Überprüfung von Clientzertifikaten im Rahmen von SSL über TCP oder im Rahmen der Sicherheit bei SOAP

Bei Verwendung von SSL (Secure Sockets Layer) über TCP- oder MESSAGE-Sicherheit (SOAP) werden Clientzertifikate entsprechend dem CertificateValidationMode Eigenschaftswert der X509ClientCertificateAuthentication Klasse überprüft. Die Eigenschaft wird auf einen der X509CertificateValidationMode Werte festgelegt. Die Sperrüberprüfung erfolgt entsprechend den Werten des RevocationMode Eigenschaftswerts der X509ClientCertificateAuthentication Klasse. 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 des Dienstzertifikats bei SSL über TCP und SOAP-Sicherheit

Bei Verwendung von SSL über TCP oder (SOAP)-Nachrichtensicherheit werden Dienstzertifikate entsprechend dem CertificateValidationMode Eigenschaftswert der X509ServiceCertificateAuthentication Klasse überprüft. Die Eigenschaft wird auf einen der X509CertificateValidationMode Werte festgelegt.

Die Sperrüberprüfung erfolgt entsprechend den Werten des RevocationMode Eigenschaftswerts der X509ServiceCertificateAuthentication Klasse. 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