代码之家  ›  专栏  ›  技术社区  ›  nicechap

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

  •  0
  • nicechap  · 技术社区  · 12 年前

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

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

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

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

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

    问题:是否可以取消特定的定义(并且仍然让服务工作),以便服务动态地选择正确的证书?这是怎么回事?

    非常感谢您的投入!

    1 回复  |  直到 12 年前
        1
  •  0
  •   Yaron Naveh    12 年前

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

    推荐文章