使用netTcpBinding为WCF服务启用基于证书的身份验证

Ira*_*ney 9 authentication wcf .net-4.0 nettcpbinding x509certificate

我有一个WCF服务,使用netTcpBinding的单个端点公开,它位于服务器A上,托管在我们域上的内部LAN上的IIS7.5/WAS上.

然后,此服务由位于服务器B上的ASP.NET Web客户端应用程序使用,该应用程序也在IIS7.5上托管,在我们的域外部具有外部托管提供商,并通过VPN连接到我们的LAN,仅允许服务器A之间的流量和服务器B.

在开发期间,当我测试这个概念时,我在我们域内的另一个IIS服务器上运行了Web客户端应用程序,使用绑定安全性mode="Transport"和传输clientCredentialType="Windows"工作正常.

然后我将Web客户端应用程序移动到外部服务器B,以进一步进行概念验证测试,设置绑定安全性mode="None",显然这个服务器在我们的域之外,我不能使用Windows身份验证,它仍然可以正常工作.

我现在需要做的是,启用切换回使用传输安全性是设置clientCredentialType="Certificate",因为你不能拥有传输安全性clientCredentialType="None".

这就是我开始失败的地方.我似乎围绕web.config着服务和客户端web.config在哪里定义证书以及在哪里存储证书的哪些部分.

基本上我要做的是验证服务器B确实是服务器B调用服务器A上的服务,从而防止任何欺骗或DNS颠覆问题,这可能导致服务器A上的服务被非法访问.

我的想法是我需要为服务器B创建一个证书,服务器A持有公钥来验证它?如果是这种情况,则服务器B已经安装了通配符SSL证书,因为它为我们的子域提供了各种应用程序.此证书可以用于WCF身份验证吗?

我发现的SO问题似乎都没有涵盖这一点,我发现的所有各种网站和书籍例子都不是那么清楚.它起初看起来像WCF配置有点像黑色艺术.

这都是使用.NET 4和Visual Basic构建的.任何帮助将不胜感激.

Six*_*aez 6

MSDN示例提供了如何在代码和配置中使用证书配置netTcpBinding的示例.只需选择适合您的方案.证书应由VeriSign或Thwate等公共(商业)证书颁发机构颁发,以便外部主机提供商和内部服务器信任.