【问题标题】:How can I use a self-signed client certificate in a WCF call with transport security?如何在具有传输安全性的 WCF 调用中使用自签名客户端证书?
【发布时间】:2014-06-18 15:58:57
【问题描述】:

我有一个使用 WS-HTTP 绑定和传输安全性 (SSL) 的 WCF 服务(内部编写)。我们正在使用客户端证书和可接受证书的白名单(证书是带外提供给我们的)对呼叫者进行身份验证。因此,我们使用自定义验证器(例如,派生自 System.IdentityModel.Selectors.X509CertificateValidator 的类)来执行数据库查询以检查白名单。

它适用于以下情况:我们有一个用于开发的根证书,由开发团队颁发(使用 OpenSSL)。此根在托管我们的 WCF 服务的服务器上是受信任的(例如,安装在受信任的第三方 CA 证书存储中)。测试客户端配置为提供由该根签名的证书。这种情况的行为符合预期。

在以下情况下不起作用:客户端向服务提供自签名证书。在这种情况下,客户端会收到错误消息“HTTP 请求被客户端身份验证方案‘匿名’禁止”,而且——这是奇怪的部分——服务的证书验证器甚至没有运行。我们没有机会竖起大拇指。客户端证书被低于我们验证器的层拒绝。

如何在我的服务中使用自签名客户端证书?

【问题讨论】:

    标签: wcf ssl


    【解决方案1】:

    你不能。在 WCF 中,WS-HTTP 传输安全性是 SSL。我的错误是由于双方之间的 SSL 协商失败造成的。

    这种协商的正常情况如下:服务向客户端发送它信任的根证书列表。客户端检查此列表并找到服务器认为值得信赖的证书并将其发送。

    在我的错误情况下,客户端正在检查服务器的列表并确定其证书不受信任。此时客户端通常会尝试协商到匿名访问,这在我的情况下是被禁止的,因此协商失败。

    在 WS-HTTP 绑定 + 传输安全方案中,即使您使用自定义验证模式,WCF 也不支持自签名客户端证书或由不受信任的 CA 颁发的证书。它确实支持消息安全中的这种情况。我怀疑 Net.TCP 支持这种情况,但还没有测试过。

    【讨论】:

      猜你喜欢
      • 2011-03-14
      • 1970-01-01
      • 2013-07-14
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      相关资源
      最近更新 更多