【问题标题】:WCF WsHttpBinding Certificate Transport Security - Windows Certificate ConfigurationWCF WsHttpBinding 证书传输安全 - Windows 证书配置
【发布时间】:2011-09-23 07:28:08
【问题描述】:

我有两个 WCF 服务,它们使用 WsHttpBinding 和传输安全相互证书身份验证,它们托管在同一个 Windows 服务器上。可以访问一个 WCF 服务的客户端不应访问另一个 WCF 服务。我需要一些帮助来配置 Windows 主机上的客户端证书。客户端证书由受信任的 CA 签名,中间证书链和根证书链已安装在服务器上。似乎该服务自动依赖于信任链,并且在让客户端访问服务之前根本不需要安装在服务器上的实际客户端证书 - 这不是我想要的行为。有人可以告诉我应该如何配置这些客户端证书以明确允许访问一项服务而不是另一项服务吗?

谢谢。

【问题讨论】:

    标签: wcf wcf-security


    【解决方案1】:

    这与证书本身无关。当使用相互 SSL 身份验证时,证书仅用于对客户端进行身份验证,并且身份验证在您的应用程序之外完成(这与您可以创建自定义证书验证器的消息安全性不同)。一旦证书被信任,客户端就会自动使用证书对服务器上的任何内容进行身份验证。

    您正在寻找授权 - 您定义经过身份验证的客户端可以对您的服务执行哪些操作的步骤。您可以使用 role based security 将您的授权逻辑硬编码到您的服务中,也可以实现两个自定义 ServiceAuthorizationManagers 并将每个分配给单个服务。

    【讨论】:

    • 感谢拉迪斯拉夫的回答。所以看起来我必须编写代码才能限制对所需证书的访问。在这种情况下,我计划编写一个 SAM 并根据证书指纹指定授权客户端的本地配置。您能告诉我在运行时确定经过身份验证的客户端证书指纹的正确方法是什么吗?
    • 您熟悉证书信任列表 (CTL) 吗?我可以配置一个 CTL 来实现结果吗?
    • 它应该在ClaimSet 中,您将在其中使用set.FindClaims(ClaimTypes.Thumbprint, Rights.Identity) 之类的东西,并且您应该获得所有带有证书指纹的声明。
    • 如果您的服务都托管在不同的站点(= 不同的 TCP 端口),CTL 应该也能正常工作。
    • 再次感谢您的快速回复。我更深入地研究了 CTL,从我正在阅读的内容来看,它似乎只适用于添加受信任的根/中间 CA——而不是最终客户端证书。你能确认还是否认这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    相关资源
    最近更新 更多