【问题标题】:WCF - x509 Certificate from Smart Card - 'Cannot Verify Signature'WCF - 来自智能卡的 x509 证书 - “无法验证签名”
【发布时间】:2012-06-20 11:52:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: wcf iis-6 pki wshttpbinding x509certificate2


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2015-03-03
      • 2015-10-09
      • 2013-01-28
      相关资源
      最近更新 更多