除了通过 HTTP (HTTPS) 或 TCP 的传输层安全 (TLS) 之外,还可以在 Windows Communication Foundation (WCF) 中使用具有消息层 (SOAP) 安全的证书。 本主题介绍验证此类证书的方式的差异。
验证 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 可以执行客户端应用程序开发人员认为有必要验证服务证书的任何检查。
通过 TCP 或 SOAP 安全性验证 SSL 中的客户端证书
使用通过 TCP 的安全套接字层 (SSL) 或消息 (SOAP) 安全时,根据 CertificateValidationMode 类的 X509ClientCertificateAuthentication 属性值验证客户端证书。 该属性设置为其中 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
通过 TCP 和 SOAP 安全性验证 SSL 中的服务证书
使用 SSL over 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