Skillnader i certifikatverifiering mellan HTTPS, SSL över TCP och SOAP-säkerhet

Du kan använda certifikat i Windows Communication Foundation (WCF) med säkerhet på meddelandenivå (SOAP) utöver TLS (Transport Layer Security) via HTTP (HTTPS) eller TCP. I det här avsnittet beskrivs skillnader i hur sådana certifikat verifieras.

Validering av HTTPS-klientcertifikat

När du använder HTTPS för att kommunicera mellan en klient och en tjänst måste certifikatet som klienten använder för att autentisera till tjänsten ha stöd för kedjeförtroende. Den måste alltså länkas till en betrodd rotcertifikatutfärdare. Annars genererar HTTP-lagret ett WebException med meddelandet "Fjärrservern returnerade ett fel: (403) Förbjudet." WCF ytbehandlar det här undantaget som en MessageSecurityException.

Validering av HTTPS-tjänstcertifikat

När du använder HTTPS för att kommunicera mellan en klient och en tjänst måste certifikatet som servern autentiserar med stödja kedjeförtroende som standard. Den måste alltså länkas till en betrodd rotcertifikatutfärdare. Ingen onlinekontroll utförs för att se om certifikatet har återkallats. Du kan åsidosätta det här beteendet genom att registrera ett RemoteCertificateValidationCallback återanrop, enligt följande kod.

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

där signaturen för ValidateServerCertificate är följande:

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

Implementeringen ValidateServerCertificate kan utföra alla kontroller som klientprogramutvecklaren anser vara nödvändiga för att verifiera tjänstcertifikatet.

Validering av klientcertifikat i SSL via TCP- eller SOAP-säkerhet

När du använder SSL (Secure Sockets Layer) via TCP- eller meddelandesäkerhet (SOAP) verifieras klientcertifikaten CertificateValidationMode enligt klassens egenskapsvärde X509ClientCertificateAuthentication . Egenskapen är inställd på ett av X509CertificateValidationMode värdena. Återkallningskontroll utförs enligt egenskapsvärdet i RevocationMode-klassen X509ClientCertificateAuthentication. Egenskapen är inställd på ett av X509RevocationMode värdena.

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

Validering av tjänstcertifikat i SSL över TCP och SOAP Security

När du använder SSL via TCP- eller SOAP-meddelandesäkerhet verifieras tjänstcertifikat enligt CertificateValidationMode klassens egenskapsvärde X509ServiceCertificateAuthentication . Egenskapen är inställd på ett av X509CertificateValidationMode värdena.

Återkallningskontroll utförs enligt egenskapsvärdet i RevocationMode-klassen X509ServiceCertificateAuthentication. Egenskapen är inställd på ett av X509RevocationMode värdena.

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

Se även