Различия в проверке сертификатов между HTTPS, SSL через TCP и безопасностью SOAP

Сертификаты можно использовать в Windows Communication Foundation (WCF) с безопасностью уровня сообщений (SOAP) в дополнение к безопасности транспортного уровня (TLS) посредством HTTP (HTTPS) или TCP. В этом разделе описываются различия в том, как проверяются такие сертификаты.

Проверка сертификатов клиента HTTPS

При использовании HTTPS для обмена данными между клиентом и службой сертификат, который клиент использует для проверки подлинности в службе, должен поддерживать доверие цепочки. То есть он должен быть привязан к доверенному корневому центру сертификации. Если нет, уровень HTTP вызывает WebException, сообщение: "Удаленный сервер вернул ошибку: (403) Запрещено". WCF представляет это исключение как MessageSecurityException.

Проверка сертификатов службы HTTPS

При использовании HTTPS для обмена данными между клиентом и службой сертификат, с которым сервер проходит проверку подлинности, должен поддерживать доверие цепочки по умолчанию. То есть он должен быть привязан к доверенному корневому центру сертификации. Проверка в сети не выполняется, чтобы узнать, был ли отозван сертификат. Это поведение можно переопределить, зарегистрируя обратный RemoteCertificateValidationCallback вызов, как показано в следующем коде.

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

где подпись для ValidateServerCertificate следующей:

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

Реализация ValidateServerCertificate может выполнять любые проверки того, что разработчик клиентского приложения считает необходимым для проверки сертификата службы.

Проверка сертификатов клиента в SSL по протоколу TCP или SOAP Security

При использовании SSL через TCP или безопасность сообщения (SOAP) сертификаты клиента проверяются в соответствии со значением свойства CertificateValidationMode класса. Свойство имеет одно из значений X509CertificateValidationMode . Проверка отзыва выполняется в соответствии со значениями свойства RevocationMode класса X509ClientCertificateAuthentication. Свойство имеет одно из значений 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

Проверка сертификата службы в SSL через TCP и безопасность SOAP.

При использовании безопасности сообщений SSL через TCP или SOAP сертификаты службы проверяются в соответствии со CertificateValidationMode значением X509ServiceCertificateAuthentication свойства класса. Свойство имеет одно из значений X509CertificateValidationMode .

Проверка отзыва выполняется в соответствии со значениями свойства RevocationMode класса X509ServiceCertificateAuthentication. Свойство имеет одно из значений 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

См. также