0

暗号化と署名に (相互) 証明書を使用する WCF サービスを実行しています。これまでのところ、すべてが正常に機能しています。

問題は次のとおりです。数週間以内にサービス証明書を交換する必要があります。サーバーとクライアントの変更を互いに独立して実装したいので、アクティビティの緊密な調整は必要ありません。理想的に実行したい手順は次のとおりです。

  1. 新しいサービス証明書を証明書ストアにインストールします (問題ありません)。
  2. 古い証明書と新しい証明書の両方で機能するように WCF サービスを構成します。この時点で、サーバーは、クライアントが使用するキーに応じて、古い公開キーと新しい公開キーの両方で暗号化された要求を受け入れることができるはずです。クライアントはまだ古い証明書を使用しています。
  3. 新しい証明書を使用するようにクライアントを構成します。
  4. 古い証明書を証明書ストアから削除します。

私の問題はステップ 2 にあります。サービスを構成する方法に関する参照が見つからないため、両方の証明書を使用して、要求のパラメーター (SubjectKeyIdentifier など) に基づいて正しい証明書を選択できます。具体的には、どのサービス証明書を使用するかを WCF に指示する必要があるようです。以下は、サーバー構成からの関連するスニペットです (カスタム バインディングを使用していますが、ここでは関係ないと思います)。この場合、サブジェクト名に基づいて証明書を識別します。

  <serviceBehaviors>
    <behavior name="SecurityBehavior">
    ...
      <serviceCredentials>
        <clientCertificate>
          <authentication certificateValidationMode="PeerTrust"/>
        </clientCertificate>
    <serviceCertificate  findValue="MyCertName" x509FindType="FindBySubjectName"/>
      </serviceCredentials>
    </behavior>
  </serviceBehaviors>
</behaviors>

質問: サービスが正しい証明書を動的に選択するように、特定の定義を削除して (サービスを引き続き機能させることは) 可能ですか? それはどのように機能しますか?

ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

0

サービス証明書は 1 つしか持てないと思います。クライアントとサーバー間で同時に変更を行うことができない場合は、古い証明書と新しい証明書の 2 つの異なるサービスを設定してみてください。次に、クライアントを徐々に移行して、新しいサービスの URL/証明書で動作するようにします。クライアントの URL を変更できず、証明書だけを変更できる場合は、証明書に基づいて要求を正しいサーバーにルーティングすることを認識しているが、それを回避しようとするサーバー プロキシを構築できます。

于 2013-09-13T13:21:21.583 に答える