【问题标题】:WCF - Using more than one service certificate (due to certificate change)WCF - 使用多个服务证书(由于证书更改)
【发布时间】:2013-09-13 13:12:14
【问题描述】:

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

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

  1. 在证书存储中安装新的服务证书(那里没问题)
  2. 配置 WCF 服务,使其可以同时使用旧证书和新证书。 此时,服务器应该能够接受使用旧公钥和新公钥加密的请求,具体取决于客户端使用的密钥。 客户端仍将使用旧证书。
  3. 将客户端配置为使用新证书。
  4. 从证书存储中删除旧证书。

我的问题在于第 2 步。我找不到有关如何配置服务的任何参考,因此它能够使用这两种证书并根据请求中的参数(例如 SubjectKeyIdentifier)选择正确的证书。 看来我特地要告诉 WCF 使用哪个服务证书。 下面是我们服务器配置中的相关 sn-p(我们使用自定义绑定,但我想这在这里无关紧要)。 在这种情况下,我们根据主题名称来识别证书。

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

问题:是否可以摆脱特定的定义(并且仍然有服务工作),以便服务动态选择正确的证书?这将如何运作?

非常感谢您的意见!

【问题讨论】:

    标签: c# wcf web-services x509certificate


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2014-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2013-12-24
      • 2011-08-10
      • 2013-07-05
      • 1970-01-01
      相关资源
      最近更新 更多