次の方法で共有


方法 : カスタム証明書検証を使用するサービスを作成する

このトピックでは、カスタム証明書検証を実装する方法、クライアントまたはサービスの資格情報の設定により、既定の証明書検証機能を、カスタム証明書検証で置き換える方法について解説します。

X.509 証明書を使ってクライアントやサービスを認証する場合、Windows Communication Foundation (WCF) の既定では、Windows 証明書ストアと Crypto API を使用して証明書が検証され、信頼できるかどうかが確認されます。ところが、組み込みの検証機能では不充分で、処理内容を変更しなければならない場合もあります。WCF では、ユーザーがカスタムの証明書検証機能を追加して、検証ロジックを簡単に変更できます。カスタムの証明書検証機能が指定されている場合、WCF では、組み込みの検証機能ではなく、カスタムの検証処理のみが使用されます。

手順

カスタムの証明書検証機能を作成するには

  1. X509CertificateValidator から派生する新しいクラスを定義します。

  2. 抽象メソッドである Validate を実装します。検証対象の証明書が、引数としてこのメソッドに渡されます。検証処理の結果、証明書が有効ではないと判断されると、このメソッドは、SecurityTokenValidationException という例外をスローします。有効であればそのまま呼び出し元に制御を返します。

    ms733806.note(ja-jp,VS.90).gifメモ :
    クライアントに認証エラーを返すには、Validate メソッドで FaultException をスローします。

サービス構成でカスタム検証処理を指定するには

  1. <system.ServiceModel> 要素に <behaviors> 要素と serviceBehaviors section を追加します。

  2. Behavior elementを追加し、name 属性に適切な値を設定します。

  3. <behavior> 要素に <serviceCredentials> Elementを追加します。

  4. <serviceCredentials> 要素に <clientCertificate> 要素を追加します。

  5. <clientCertificate> 要素に <authentication> of <clientCertificate> Element を追加します。

  6. customCertificateValidatorType 属性に検証処理の型を設定します。この属性に型の名前空間と名前を設定する例を以下に示します。

  7. certificateValidationMode 属性を Custom に設定します。

    <configuration>
     <system.serviceModel>
      <behaviors>
       <serviceBehaviors>
        <behavior name="ServiceBehavior">
         <serviceCredentials>
          <clientCertificate>
          <authentication certificateValidationMode="Custom" customCertificateValidatorType="Samples.MyValidator, service" />
          </clientCertificate>
         </serviceCredentials>
        </behavior>
       </serviceBehaviors>
      </behaviors>
    </system.serviceModel>
    </configuration>
    

クライアント側の設定でカスタム証明書検証を指定するには

  1. <system.ServiceModel> 要素に <behaviors> 要素と serviceBehaviors section を追加します。

  2. <endpointBehaviors> 要素を追加します。

  3. <behavior> 要素を追加し、name 属性に適切な値を設定します。

  4. <clientCredentials> 要素を追加します。

  5. <serviceCertificate> of <clientCredentials> Element を追加します。

  6. 次の例に示すように、<authentication> of <serviceCertificate> Element を追加します。

  7. customCertificateValidatorType 属性に検証処理の型を設定します。

  8. certificateValidationMode 属性を Custom に設定します。この属性に型の名前空間と名前を設定する例を以下に示します。

    <configuration>
     <system.serviceModel>
      <behaviors>
       <endpointBehaviors>
        <behavior name="clientBehavior">
         <clientCredentials>
          <serviceCertificate>
           <authentication certificateValidationMode="Custom" 
                  customCertificateValidatorType=
             "Samples.CustomX509CertificateValidator, client"/>
          </serviceCertificate>
         </clientCredentials>
        </behavior>
       </endpointBehaviors>
      </behaviors>
     </system.serviceModel>
    </configuration>
    

サービス側のコードでカスタム証明書検証を指定するには

  1. ClientCertificate プロパティの値としてカスタム証明書検証を指定します。サービスの資格情報には、Credentials プロパティを使用してアクセスできます。

  2. CertificateValidationMode プロパティを Custom に設定します。

クライアント側のコードでカスタム証明書検証を指定するには

  1. カスタム証明書検証を、CustomCertificateValidator プロパティを使って指定します。クライアントの資格情報には、Credentials プロパティを使用してアクセスできます。ServiceModel Metadata Utility Tool (Svcutil.exe) によって生成されるクライアント クラスは、常に ClientBase クラスから派生したものです。

  2. CertificateValidationMode プロパティを Custom に設定します。

説明

カスタム証明書検証を実装し、サービス側で使用する例を以下に示します。

コード

関連項目

リファレンス

X509CertificateValidator