0

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

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

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

感觉不太明白web.config文件中服务证书和客户端证书的使用。有人可以帮我吗?

4

1 回答 1

0

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

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

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

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

于 2012-06-19T00:44:50.723 回答