我有一个WCF服务(内部编写),使用WS绑定和传输安全性(SSL)。我们正在用客户证书和可接受证书的白名单对呼叫者进行身份验证(证书是带外提供给我们的)。因此,我们使用自定义验证器(例如,从System.IdentityModel.Selectors.X509CertificateValidator)派生的类来执行数据库查询以检查白名单。
它适用于以下情况:我们在开发中使用了一个根证书,由开发团队(使用OpenSSL)颁发。此根用户是可信的(例如,安装在托管WCF服务的服务器上的可信第三方CA证书存储中)。测试客户端被配置为呈现由此根用户签名的证书。这种情况的行为与预期一致。
在以下情况下,它不起作用:客户端向服务提供自签名证书。在这种情况下,客户端收到错误消息“HTTP请求被禁止使用客户端身份验证方案‘’匿名‘”,而且--这是奇怪的部分--服务的证书验证器甚至没有运行。我们没机会大拇指了。客户端证书被一个低于我们的验证器的层拒绝。
如何在我的服务中使用自签名客户端证书?
发布于 2014-06-18 15:59:31
在WCF中,WS传输安全性是SSL。我的错误是由于双方之间的SSL协商失败造成的。
此协商的正常情况如下:服务向客户端发送它信任的根证书列表。客户端检查此列表,发现服务器将发现可信任的证书并将其发送。
在我的错误情况下,客户端正在检查服务器列表并确定其证书不受信任。此时,客户端通常会尝试协商到匿名访问,这在我的情况下是禁止的,因此协商失败。
即使使用自定义验证模式,WCF也不支持WS-HTTP绑定+传输安全方案中由不受信任的CA颁发的自签名客户端证书或证书。它确实在消息安全方面支持此场景。我怀疑Net.TCP支持这个场景,但还没有进行测试。
https://stackoverflow.com/questions/24290135
复制相似问题