暗号化と署名に (相互) 証明書を使用する WCF サービスを実行しています。これまでのところ、すべてが正常に機能しています。
問題は次のとおりです。数週間以内にサービス証明書を交換する必要があります。サーバーとクライアントの変更を互いに独立して実装したいので、アクティビティの緊密な調整は必要ありません。理想的に実行したい手順は次のとおりです。
- 新しいサービス証明書を証明書ストアにインストールします (問題ありません)。
- 古い証明書と新しい証明書の両方で機能するように WCF サービスを構成します。この時点で、サーバーは、クライアントが使用するキーに応じて、古い公開キーと新しい公開キーの両方で暗号化された要求を受け入れることができるはずです。クライアントはまだ古い証明書を使用しています。
- 新しい証明書を使用するようにクライアントを構成します。
- 古い証明書を証明書ストアから削除します。
私の問題はステップ 2 にあります。サービスを構成する方法に関する参照が見つからないため、両方の証明書を使用して、要求のパラメーター (SubjectKeyIdentifier など) に基づいて正しい証明書を選択できます。具体的には、どのサービス証明書を使用するかを WCF に指示する必要があるようです。以下は、サーバー構成からの関連するスニペットです (カスタム バインディングを使用していますが、ここでは関係ないと思います)。この場合、サブジェクト名に基づいて証明書を識別します。
<serviceBehaviors>
<behavior name="SecurityBehavior">
...
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</clientCertificate>
<serviceCertificate findValue="MyCertName" x509FindType="FindBySubjectName"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
質問: サービスが正しい証明書を動的に選択するように、特定の定義を削除して (サービスを引き続き機能させることは) 可能ですか? それはどのように機能しますか?
ご意見をお寄せいただきありがとうございます。