我有一个与您的场景类似的生产项目。我有一个通过 netTCPBinding 托管端点的 Windows 服务,并且我使用了 x509 证书……尽管在我的情况下,目的是加密传输层和消息层,因为我跨越了不受信任的安全边界。除了要求证书存在之外,我不太关心提供身份验证/授权。
与您的 Intranet 场景(我假设)类似,我在安装时对服务器和客户端机器拥有权限......或者至少可以规定一些安装条款。
我没有购买 x509 证书并让客户承担这笔费用,而是选择推出我们自己的证书。我们将其中一台 Win2003 服务器设置为 CA,颁发我们自己的证书颁发机构证书。然后,我们为服务器生成了一个 x509 证书,并为客户端生成了单独的 x509 证书。
客户端和服务器证书安装在客户端和服务器上(视情况而定)到计算机级别的个人用户存储中。我们还将我们的 CA 证书直接安装到受信任的根证书颁发机构部分,从而使我们的客户端和服务器证书受信任。
因为我不太关心身份验证/授权,所以我不知道推荐什么作为处理将证书绑定到单个用户并且比机器级别更精细的最佳实践(我的解决方案是 Windows 服务到 Windows 服务通信——完全无人看管)。我认为您需要为每个用户提供一个证书,将其安装到证书 MMC 中的个人用户存储中。运行时实现将由您如何配置 WCF 来进行证书查找来指导,因此它应该相当容易。
在整个过程中,我非常依赖从这篇很棒的 CodeProject 文章中学到的知识:使用证书保护 WCF 服务。它会引导您生成/安装证书。示例 WCF 应用程序是 IIS 托管的,但我能够非常轻松地将配置部分从 web.config 转换为 app.config。
在我的例子中,我将 Win2003 中用于请求证书的 Web 界面暴露给 Web 本身,因此客户端将来可以直接请求证书。我们有审批控制,所以它运作良好。我还没有需要生成新的证书,所以我不能说这会带来多少摩擦。