【发布时间】:2009-10-27 13:54:54
【问题描述】:
我有两台 WCF 服务器,都在域 mydomain.com 上(虚构示例,如下 IP !),分别命名为 server1 和 server2。
它们既可以通过公共 IP 地址(foo.1 和 2)访问,也可以从它们所在的专用 LAN(即 192.168.0.1 和 192.168.0.2)访问
我拥有 *.mydomain.com 的通配符 ssl 证书。它已正确安装在相关商店中(即 Personal 用于加密和 Trusted Clients 用于身份验证)
我希望我的两台服务器使用我的通配符证书在它们的本地网络地址上相互连接以进行身份验证。
我已更新 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)
我还为“mydomain.com”的 IPV4 本地接口编辑了特定于连接的 DNS 后缀
我的证书在我的 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 : 连接失败 服务器服务器 2: System.ServiceModel.Security.MessageSecurityException: 传出身份检查失败 信息。预期的 DNS 身份 远程端点是 'server2.mydomain.com' 但远程 端点提供的 DNS 声明 'mydomain.com'。如果这是一个 合法的远程端点,你可以 通过显式解决问题 指定 DNS 身份“mydomain.com” 作为身份属性 创建通道时的 EndpointAddress 代理。
我试图让服务器回答 Server2.mydomain.com 而不仅仅是 mydomain.com,但没有成功。有关如何执行此操作的任何提示?
我也尝试了错误消息中建议的解决方案,但这似乎根本没有效果(其他用户似乎有the same problem,我还没有找到解决方案)。关于如何解决这个问题的任何想法?
编辑: 我已经与我的证书提供商确认我确实可以将它用于 X509 身份验证。
【问题讨论】:
标签: .net wcf dns x509certificate