WCF/WF サービスで使用されている有効期限切れの証明書を検出する Windows PowerShell スクリプト

WCF/WF サービスで使用される証明書を指定するための構成は、次のようになります。

    <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name="MyBehavior">
            <serviceCredentials>
              <serviceCertificate findValue="86F9D16EAF13CF2E7C1744AD8DB4F04BEF55833B" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" />
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
      </behaviors>
    </system.serviceModel>

この構成は、オペレーティング システムの証明書ストアに対するクエリ文字列です。サービスの構成から実際の証明書にクエリをマップし、有効期限などの情報を検証することは、簡単な作業ではありません。

このサンプルは、次の処理を行う Windows PowerShell スクリプトを作成する方法を示しています。

  • AppFabric 構成コマンドレットによって返されたサービスの構成情報に基づいて証明書のクエリを実行する。

  • クエリ対象の証明書に対して検証を実行し、有効期限切れになった証明書の一覧を返す。

ヒント

サンプルは学習用としてのみ提供されています。運用環境での使用を目的としておらず、運用環境でのテストも行われていません。サンプルについてマイクロソフトのテクニカル サポートは提供されません。

前提条件

ユーザーは Windows PowerShell スクリプトおよび AppFabric コマンドレットについて理解している必要があります。

サンプルでは次のことを前提としています。

  • Windows PowerShell v2 がインストールされている。

  • 既定の AppFabric インストールが実行されている。

サンプルの場所とファイル

サンプル ファイルには以下のものが含まれています。

  • Readme.mhtml

  • Code\detectExpiredCertificates.ps1

このサンプルの設定と実行

  1. 次の例は、スクリプトの実行方法を示しています。

    PS> cd <samples>\Samples\Management\DetectExpiredCertificate\Code
    PS> .\detectExpiredCertificates.ps1 "Default Web Site" /MyApp
    Thumbprint                                   Subject           NotBefore                                NotAfter                                               
    ----------                                   -------           ---------                                --------                                               
    2E99C509D371836647EA1A0D4CE4756F21B1CD2C                       1/5/2009 12:27:22 AM                     1/5/2010 12:27:22 AM    
    

    ヒント

    サンプルを動作させるために実行ポリシーを Restricted から RemoteSigned に変更することが必要な場合があります。詳細については、「help Set-ExecutionPolicy」を参照してください。

    ヒント

    2 つのパラメーターにより、サイト名と仮想パスを組み合わせて検出スコープを指定します。この例では、"MyApp" アプリケーションに属するすべてのサービスについて、有効期限切れの証明書の有無が検査されます。これらのパラメーターは省略可能です。これらのパラメーターを指定しない場合は、サーバー スコープが使用されます。指定したスコープに証明書が構成されていない場合、または有効期限切れの証明書がない場合、スクリプトの出力は表示されません。

  2. Windows PowerShell 証明書プロバイダーを使用して、証明書ストア内の利用可能な証明書間を移動できます。これは、有効な証明書を使用してサービスを構成するのに役立ちます。Windows PowerShell 証明書プロバイダーを使用する方法の詳細については、「証明書プロバイダー」 (https://go.microsoft.com/fwlink/?LinkId=194421) を参照してください。

    PS cd cert:\LocalMachine\My
    PS cert:\LocalMachine\My> dir | select *
    <results omitted>
    

このサンプルの削除

  1. Windows PowerShell セッションを終了するだけです。このサンプルを実行しても、コンピューター上のリソースは変更されません。

デモ

このサンプルのスクリプトには 3 つのセクションがあります。

初期化

スクリプトの最初の部分では、AppFabric コマンドレット モジュールが確実に読み込まれるようにします。

if ((Get-Command -Module ApplicationServer) -eq $null)
{
    Import-Module ApplicationServer
}

メイン スクリプト

メイン スクリプトでは、最初に AppFabric Get-ASAppService コマンドレットを呼び出して、指定したスコープの WCF/WF サービスの一覧を取得します。次に、パイプを使用してサービスの一覧を Get-ASAppServiceCertificate コマンドレットに渡し、サービス証明書の構成を読み取ります。コマンドレットによって返されるすべての $null プロパティは、実際のランタイムの既定値に置き換えられることに注意してください。

スクリプトは次に、構成に指定されているクエリに基づいて、オペレーティング システムの証明書ストアから証明書情報を取得します。クエリには System.Security.Cryptography.X509Certificates というマネージ コード API を使用します。

最後に、スクリプトは証明書の NotBefore プロパティと NotAfter プロパティを現在時刻に対して検証し、出力を書式設定します。

ヘルパー関数

  • ResolveDefaultValue - Get-ASAppServiceCertificate コマンドレットによって返された構成プロパティのランタイムの既定値を解決します。

  • FindCertificates - System.Security.Cryptography.X509Certificates API を使用して証明書ストアに照会します。

  2011-12-05