WCF - 使用多个服务证书(由于证书更改)
本文关键字:证书 于证书 服务 WCF | 更新日期: 2023-09-27 18:31:16
我们运行一个 WCF 服务,该服务使用(相互)证书进行加密和签名。到目前为止,一切正常。
问题是:几周后,我们需要更换服务证书。我们希望在服务器和客户端上彼此独立地实现更改,因此不需要密切协调活动。以下是我们理想情况下要采取的步骤:
- 在证书存储中安装新的服务证书(那里没有问题)
- 配置 WCF 服务的方式使其能够同时使用旧证书和新证书。此时,服务器应该能够接受使用旧公钥和新公钥加密的请求,具体取决于客户端使用的密钥。客户端仍将使用旧证书。
- 将客户端配置为使用新证书。
- 从证书存储中删除旧证书。
我的问题是第 2 步。我找不到有关如何配置服务的任何参考,以便它能够使用两个证书并根据请求中的参数(例如 SubjectKeyIdentifier)选择正确的证书。看来我必须特别告诉 WCF 要使用哪个服务证书。下面是我们服务器配置中的相关代码片段(我们使用自定义绑定,但我想这在这里无关紧要)。在这种情况下,我们根据使用者名称来识别证书。
<serviceBehaviors>
<behavior name="SecurityBehavior">
...
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerTrust"/>
</clientCertificate>
<serviceCertificate findValue="MyCertName" x509FindType="FindBySubjectName"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
问:是否可以摆脱特定定义(并且仍然让服务工作),以便服务动态选择正确的证书?这将如何运作?
非常感谢您的意见!
我相信
您只能有一个服务证书。如果无法同时在客户端和服务器之间进行更改,请尝试设置 2 个不同的服务,一个使用旧证书,另一个使用新证书。然后逐步迁移客户端以使用新的服务 URL/证书。如果您不能更改客户端 url 而只能更改证书,您可以构建一个服务器代理,该代理知道根据证书将请求路由到 rigth 服务器,但尽量避免它。