WCF - 来自智能卡的x509证书 - “无法验证签名”

时间:2012-06-18 13:35:59

标签: wcf iis-6 pki wshttpbinding x509certificate2

我在IIS6上运行了WCF服务,该服务使用“使用消息凭据传输”安全设置配置了WSHTTPBinding(传输客户端凭据设置为“无”,消息设置为“证书”。这是正在由在VS 2010中使用服务通过自动生成的代码创建的.NET客户端使用。

在我的开发环境中,我创建了一个证书,作为服务证书和IIS SSL证书,由于我很懒,我导出了证书以供我的客户端应用程序使用。在该配置中一切都很好,但这不是目标环境。这个想法是让用户使用他们的智能卡来访问这项服务。目前,服务器不在同一个域上,不允许使用LDAP。

问题是,现在我在测试实验室中得到了这个,并设置了一个环境,其中SSL证书是由与用户证书相同的CA颁发的,我创建了一个自定义x509 Cert验证器和服务凭据,但之后对我的验证器的初始调用,在交接之间发生了一些事情,并在服务跟踪日志上发出一个错误,说“错误验证消息安全性”,内部异常为“无法验证签名”。因为是通过我的自定义验证器来获取并且我记录了消息,所以在SOAP端看起来一切都很好,而我在另一侧获得了证书。我确保我尝试使用的每个证书都在“受信任的用户”存储中,甚至尝试导出证书并将它们放在本地计算机“个人”存储中,没有运气。

我觉得我不完全理解在web.config文件中使用服务证书和客户端证书。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

好的,所以我在同事的帮助下设法回答了我自己的问题。在我们坐下来并开始运行一堆问题并进行一些随机谷歌搜索后,我们决定更改配置中令我惊讶的内容。

因此,为了完成我的问题,我将消息凭据设置为"证书"加密算法套件设置为" TripleDesSha256Rsa15"。事实证明,智能卡上的证书或卡本身只支持Sha1(这不是其他所有选项)。当我们将设置更改为" Basic256"时,一切都开始有效了。我最终能够将它设置为" TripleDesRsa15"它继续工作。

基本上,WCF在没有私钥的情况下发送证书,因为它无法使用该加密算法访问它。 WCF DOES NOT 在尝试访问证书时抛出异常,它只会在服务器端抛出异常"无法验证签名&# 34 ;.有点希望它会说"没有签名"因为这样可以更容易追踪。我不知道是否有人会发现这有用,但如果你这样做,并且可以找到对#34;正确的"使用智能卡与WCF的方式,请用参考文献发布。

总的来说,检查您尝试使用的加密算法,并确保它适用于您计划使用的智能卡/证书。