我有两个 WCF 服务器,都在域 mydomain.com 上(虚构的例子,下面是 IP!),分别命名为 server1 和 server2。
它们既可以通过公共 IP 地址(foo.1 和 2)访问,也可以从它们所在的私有 LAN(即 192.168.0.1 和 192.168.0.2)访问
我拥有 *.mydomain.com 的通配符 ssl 证书。它已正确安装在相关商店中(即用于加密的个人和用于身份验证的可信客户端)
我希望我的两台服务器都使用我的通配符证书在其本地网络地址上相互连接以进行身份验证。
我更新了 C:\Windows\System32\drivers\etc\hosts 文件,使其看起来像这样:
192.168.0.1 Server1.mydomain.com
192.186.0.2 Server2.mydomain.com
如果我解析 Server1.mydomain.com,这些不是我得到的 IP 地址(我宁愿得到 foo.1 - 2)
我还将 IPV4 本地接口的连接特定 DNS 后缀编辑为“mydomain.com”
我的证书在我的 Server.config 文件中是这样引用的(我已经剥离了所有与身份验证无关的部分)
<behavior name="ServerToServerBehavior" >
<serviceCredentials>
<clientCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="Online"/>
</clientCertificate>
<serviceCertificate x509FindType="FindByThumbprint" findValue="13a41b3456e431131cd461de"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="myServerAsClientBehaviorConfiguration">
<clientCredentials>
<clientCertificate x509FindType="FindByThumbprint" findValue="13a41b3456e431131cd461de" storeLocation="LocalMachine"/>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" revocationMode="Online" trustedStoreLocation="LocalMachine"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
这在我自己的具有本地生成的 X509 证书的开发计算机上运行良好,但在我的生产环境中,这就是我得到的:
Server.Connect:无法连接到服务器 Server2:System.ServiceModel.Security.MessageSecurityException:传出消息的身份检查失败。远程端点的预期 DNS 身份是“server2.mydomain.com”,但远程端点提供了 DNS 声明“mydomain.com”。如果这是一个合法的远程端点,您可以通过在创建通道代理时将 DNS 身份“mydomain.com”明确指定为 EndpointAddress 的 Identity 属性来解决此问题。
我试图让服务器回答 Server2.mydomain.com 而不仅仅是 mydomain.com,但没有成功。关于如何做到这一点的任何提示?
我也尝试了错误消息中建议的解决方案,但这似乎根本没有效果(其他用户似乎有同样的问题,我还没有找到解决方案)。关于如何解决这个问题的任何想法?
编辑:我已经与我的证书提供商确认我确实可以将它用于 X509 身份验证。