Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Сертификаты можно использовать в 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