WCF - 使用多个服务证书(由于证书更改)

时间:2013-09-13 13:12:15

标签: c# wcf web-services x509certificate

我们运行使用(相互)证书进行加密和签名的WCF服务。到目前为止一切正常。

问题在于:几周后我们需要更换服务证书。 我们希望彼此独立地在服务器和客户端上实现更改,因此不需要密切协调活动。 以下是我们理想的步骤:

  1. 在证书库中安装新服务证书(没问题)
  2. 以可以使用旧证书和新证书的方式配置WCF服务。 此时,服务器应该能够接受使用旧公钥和新公钥加密的请求,具体取决于客户端使用的密钥。 客户端仍将使用旧证书。
  3. 配置客户端以使用新证书。
  4. 从证书存储中删除旧证书。
  5. 我的问题在于第2步。我找不到关于如何配置服务的任何参考,因此它能够使用两个证书并根据请求中的参数选择正确的证书(例如SubjectKeyIdentifier)。 看来我特意要告诉WCF使用哪个服务证书。 下面是我们服务器配置的相关片段(我们使用自定义绑定,但我想这不重要)。 在这种情况下,我们根据主题名称识别证书。

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

    问题:是否有可能摆脱具体的定义(并且仍有服务工作),以便服务动态选择正确的证书?这会怎么样?

    非常感谢您的投入!

1 个答案:

答案 0 :(得分:0)

我相信你只能拥有一张服务证书。如果您无法同时在客户端和服务器之间进行更改,请尝试设置2个差异服务,一个使用旧证书,另一个使用新服务。然后逐步迁移客户端以使用新服务url / cert。如果您无法更改客户端URL但只是证书,您可以构建一个服务器代理,该代理知道根据证书将请求路由到rigth服务器,但请尽量避免使用。