次の方法で共有


HTTPS、SSL over TCP、および SOAP セキュリティの証明書検証の違い

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

こちらも参照ください