我有一个 WCF 客户端/服务应用程序,它依赖于两台机器之间的安全通信,我想使用安装在证书存储中的 x509 证书来相互识别服务器和客户端。我通过将绑定配置为<security authenticationMode="MutualCertificate"/>
. 只有客户端机器。
服务器在本地计算机/个人存储中安装了颁发给 server.mydomain.com 的证书,客户端在同一位置安装了颁发给 client.mydomain.com 的证书。除此之外,服务器在本地计算机/受信任的人中拥有客户端的公共证书,客户端在本地计算机/受信任的人中拥有服务器的公共证书。
最后,客户端已配置为检查服务器的证书。我使用system.servicemodel/behaviors/endpointBehaviors/clientCredentials/serviceCertificate/defaultCertificate
配置文件中的元素做到了这一点。
到目前为止一切顺利,这一切都有效。我的问题是我想在服务器的配置文件中指定只允许使用来自受信任的人证书存储的 client.mydomain.com 证书标识自己的客户端连接。
正确的信息在使用ServiceSecurityContext
.
那可能吗?任何提示将不胜感激。
顺便说一句,到目前为止,我的服务器的配置文件如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="MyServer.Server" behaviorConfiguration="CertificateBehavior">
<endpoint contract="Contracts.IMyService" binding="customBinding" bindingConfiguration="SecureConfig">
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost/SecureWcf"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CertificateBehavior">
<serviceCredentials>
<serviceCertificate storeLocation="LocalMachine" x509FindType="FindBySubjectName" findValue="server.mydomain.com"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="SecureConfig">
<security authenticationMode="MutualCertificate"/>
<httpTransport/>
</binding>
</customBinding>
</bindings>
</system.serviceModel>
</configuration>