【发布时间】:2011-11-03 15:15:31
【问题描述】:
我有一个 WCF 服务,它使用带有 netTcpBinding 的单个端点公开,该端点位于 Server A 上,托管在我们域的内部 LAN 上的 IIS7.5/WAS 上。
然后,此服务由位于 Server B 上的 ASP.NET Web 客户端应用程序使用,该应用程序也托管在 IIS7.5 上,由我们域之外的外部托管提供商提供,并通过链接到我们的 LAN一个安全的 VPN,只允许 服务器 A 和 服务器 B 之间的通信。
在开发过程中,当我测试这个概念时,我使用绑定安全mode="Transport" 和传输clientCredentialType="Windows" 在我们域内部的另一个 IIS 服务器上运行 Web 客户端应用程序,效果很好。
然后,我将 Web 客户端应用程序移至外部 服务器 B 以进行进一步的概念验证测试,设置绑定安全性mode="None",显然该服务器不在我们的域中,我不能使用 Windows 身份验证,它仍然可以正常工作。
我现在需要做的,要启用切换回使用传输安全性是设置clientCredentialType="Certificate",因为clientCredentialType="None" 不能具有传输安全性。
这就是我开始陷入困境的地方。关于服务的web.config 和客户端web.config 定义证书的位置以及存储证书的哪些位,我似乎在绕圈子。
基本上我要做的是验证 Server B 确实是 Server B 调用 Server A 上的服务,从而防止任何欺骗或 DNS 颠覆问题,这可能导致 Server A 上的服务被非法访问。
我的想法是,我需要为 Server B 创建一个证书,Server A 持有公钥来验证它?如果是这种情况,服务器 B 已经安装了通配符 SSL 证书,因为它作为子域服务于我们的各种应用程序。此证书可以用于 WCF 身份验证吗?
我发现的所有 SO 问题似乎都没有涵盖这一点,而且我发现的所有各种网站和书籍示例都不是那么清楚。它开始看起来像 WCF 配置有点黑艺术。
这一切都是使用 .NET 4 和 Visual Basic 构建的。任何帮助将不胜感激。
【问题讨论】:
标签: wcf authentication .net-4.0 x509certificate nettcpbinding