Tanúsítványérvényesítési különbségek a HTTPS, a TCP-alapú SSL és a SOAP-biztonság között

A Windows Communication Foundation (WCF) tanúsítványait üzenetrétegi (SOAP) biztonsággal használhatja a http (HTTPS) vagy TCP protokollon keresztüli átviteli rétegbeli biztonság (TLS) mellett. Ez a témakör az ilyen tanúsítványok érvényesítésének különbségeit ismerteti.

HTTPS-ügyféltanúsítványok érvényesítése

Amikor HTTPS-t használ az ügyfél és a szolgáltatás közötti kommunikációhoz, az ügyfél által a szolgáltatásban való hitelesítéshez használt tanúsítványnak támogatnia kell a lánc megbízhatóságát. Vagyis megbízható főtanúsítvány-szolgáltatóhoz kell kapcsolódnia. Ha nem, a HTTP-réteg kivételt emel a következő üzenettel: "A távoli kiszolgáló hibát adott vissza: (403) Tiltott." A WCF ezt a kivételt WebException-ként jeleníti meg.

HTTPS-szolgáltatástanúsítványok érvényesítése

Ha HTTPS használatával kommunikál egy ügyfél és egy szolgáltatás között, a kiszolgáló által hitelesített tanúsítványnak alapértelmezés szerint támogatnia kell a lánc megbízhatóságát. Vagyis megbízható főtanúsítvány-szolgáltatóhoz kell kapcsolódnia. Nem történik online ellenőrzés annak ellenőrzéséhez, hogy visszavonták-e a tanúsítványt. Ezt a viselkedést felülbírálhatja egy RemoteCertificateValidationCallback visszahívás regisztrálásával, ahogy az az alábbi kódban is látható.

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

ahol az aláírás ValidateServerCertificate a következő:

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

Az ValidateServerCertificate implementálása bármilyen ellenőrzést elvégezhet, amelyet az ügyfélalkalmazás fejlesztője szükségesnek tart a szolgáltatási tanúsítvány érvényesítéséhez.

Ügyféltanúsítványok érvényesítése SSL-ben TCP- vagy SOAP-biztonságon keresztül

A Secure Sockets Layer (SSL) TCP- vagy üzenetbiztonsági (SOAP) használata esetén az ügyféltanúsítványok az CertificateValidationMode osztály tulajdonságértékének X509ClientCertificateAuthentication megfelelően lesznek érvényesítve. A tulajdonság az egyik X509CertificateValidationMode értékre van állítva. A visszavonás ellenőrzése az osztály tulajdonságértékének RevocationModeX509ClientCertificateAuthentication értékei szerint történik. A tulajdonság az egyik X509RevocationMode értékre van állítva.

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

Szolgáltatástanúsítvány érvényesítése SSL-ben TCP-en és SOAP-biztonságon keresztül

Amikor SSL-t használ a TCP felett vagy (SOAP) üzenetbiztonság esetén, a szolgáltatás tanúsítványok az CertificateValidationMode osztály tulajdonságértékének X509ServiceCertificateAuthentication megfelelően lesznek érvényesítve. A tulajdonság az egyik X509CertificateValidationMode értékre van állítva.

A visszavonás ellenőrzése az osztály tulajdonságértékének RevocationModeX509ServiceCertificateAuthentication értékei szerint történik. A tulajdonság az egyik X509RevocationMode értékre van állítva.

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

Lásd még