方法 : X.509 証明書の秘密キーの暗号化プロバイダを変更する

ここでは、X.509 証明書の秘密キーを提供するために使用する暗号化プロバイダを変更する方法、およびそのプロバイダを Windows Communication Foundation (WCF) のセキュリティ フレームワークに統合する方法を説明します。証明書の使用に関する詳細については、「証明書の使用」を参照してください。

WCF のセキュリティ フレームワークには、「方法 : カスタム トークンを作成する」で説明されているように、新しい種類のセキュリティ トークンを導入する方法が用意されています。また、カスタム トークンを使用して既存のシステム指定のトークンを置き換えることも可能です。

このトピックでは、システム指定の X.509 セキュリティ トークンが、証明書の秘密キーに別の実装を提供するカスタムの X.509 トークンによって置き換えられます。これは、実際の秘密キーが、既定の Windows 暗号化プロバイダとは異なる暗号化プロバイダから提供されるシナリオで役立ちます。別の暗号化プロバイダの例として、ハードウェア セキュリティ モジュールがあります。このモジュールでは、すべての秘密キー関連の暗号操作を実行し、メモリに秘密キーを格納しないので、システムのセキュリティが向上します。

次の例は、デモンストレーションのためだけに作成されています。この例では、既定の Windows 暗号化プロバイダを置き換えていませんが、Windows 暗号化プロバイダをどこで統合できるかを示します。

手順

セキュリティ キーが関連付けられているセキュリティ トークンごとに、セキュリティ トークンのインスタンスからキーのコレクションを返す SecurityKeys プロパティを実装する必要があります。トークンが X.509 セキュリティ トークンの場合、コレクションには、証明書に関連付けられた公開キーと秘密キーの両方を表す X509AsymmetricSecurityKey クラスのインスタンスが 1 つ追加されます。証明書のキーの提供に使用する既定の暗号化プロバイダを置き換えるには、このクラスの新しい実装を作成します。

カスタムの X.509 非対称キーを作成するには

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

  2. KeySize 読み取り専用プロパティをオーバーライドします。このプロパティは、証明書の公開キーと秘密キーのペアの実際のキー サイズを返します。

  3. DecryptKey メソッドをオーバーライドします。このメソッドは、WCF のセキュリティ フレームワークによって呼び出され、対称キーを証明書の秘密キーで復号化します(このキーは、以前に証明書の公開キーで暗号化されています)。

  4. GetAsymmetricAlgorithm メソッドをオーバーライドします。このメソッドは、WCF のセキュリティ フレームワークによって呼び出され、このメソッドに渡されるパラメータに応じて、証明書の秘密キーまたは公開キーの暗号化プロバイダを表す AsymmetricAlgorithm クラスのインスタンスを取得します。

  5. 省略可能。GetHashAlgorithmForSignature メソッドをオーバーライドします。HashAlgorithm クラスの別の実装が必要な場合は、このメソッドをオーバーライドします。

  6. GetSignatureFormatter メソッドをオーバーライドします。このメソッドは、証明書の秘密キーに関連付けられた AsymmetricSignatureFormatter クラスのインスタンスを返します。

  7. IsSupportedAlgorithm メソッドをオーバーライドします。このメソッドを使用して、特定の暗号アルゴリズムがセキュリティ キー実装によってサポートされているかどうかを示します。

次の手順は、システム指定の X.509 セキュリティ トークンを置き換えるために、前の手順で作成したカスタムの X.509 非対称セキュリティ キーの実装を WCF のセキュリティ フレームワークに統合する方法を示しています。

システム指定の X.509 セキュリティ トークンをカスタムの X.509 非対称セキュリティ キー トークンで置き換えるには

  1. 次の例に示すように、システム指定のセキュリティ キーではなく、カスタムの X.509 非対称セキュリティ キーを返すカスタムの X.509 非対称セキュリティ トークンを作成します。カスタム セキュリティ トークンの詳細については、「方法 : カスタム トークンを作成する」を参照してください。

  2. 次の例に示すように、カスタムの X.509 セキュリティ トークンを返すカスタムのセキュリティ トークン プロバイダを作成します。カスタム セキュリティ トークン プロバイダの詳細については、「方法 : カスタム セキュリティ トークン プロバイダを作成する」を参照してください。

  3. イニシエータ側でカスタム セキュリティ キーを使用する必要がある場合、次の例に示すように、カスタムのクライアント セキュリティ トークン マネージャとカスタムのクライアント資格情報クラスを作成します。カスタムのクライアント資格情報とクライアント セキュリティ トークン マネージャの詳細については、「方法 : カスタム クライアントおよびサービスの資格情報を作成する」を参照してください。

  4. 受信側でカスタム セキュリティ キーを使用する必要がある場合、次の例に示すように、カスタムのサービス セキュリティ トークン マネージャとカスタムのサービス資格情報クラスを作成します。カスタムのサービス資格情報とサービス セキュリティ トークン マネージャの詳細については、「方法 : カスタム クライアントおよびサービスの資格情報を作成する」を参照してください。

関連項目

タスク

方法 : カスタム セキュリティ トークン プロバイダを作成する

リファレンス

X509AsymmetricSecurityKey
AsymmetricSecurityKey
SecurityKey
AsymmetricAlgorithm
HashAlgorithm
AsymmetricSignatureFormatter

概念

方法 : カスタム クライアントおよびサービスの資格情報を作成する
方法 : カスタム セキュリティ トークン認証システムを作成する
方法 : カスタム トークンを作成する
セキュリティ アーキテクチャ