HTTP (HTTPS) または TCP 経由のトランスポート層セキュリティ (TLS) に加えて、メッセージ層 (SOAP) セキュリティを備えた Windows Communication Foundation (WCF) の証明書を使用できます。 このトピックでは、このような証明書の検証方法の違いについて説明します。
HTTPS クライアント証明書の検証
HTTPS を使用してクライアントとサービスの間で通信する場合、クライアントがサービスに対する認証に使用する証明書は、チェーン信頼をサポートする必要があります。 つまり、信頼されたルート証明機関に接続される必要があります。 そうでない場合、HTTP レイヤーは、"リモート サーバーがエラーを返しました: (403) Forbidden" というメッセージを含む WebException を生成します。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 またはメッセージ (SOAP) セキュリティで Secure Sockets Layer (SSL) を使用する場合、クライアント証明書は、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