【问题标题】:using Self-Signed SSL certificate with WCF ws2007FederationBinding将自签名 SSL 证书与 WCF ws2007FederationBinding 一起使用
【发布时间】:2011-04-08 00:07:48
【问题描述】:

我无能为力,希望您能帮助我。我正在尝试使用自签名证书通过 WIF 从 Web 应用程序到 Web 服务获取主动 WS-Trust 身份验证。

我已经尝试过以下方法:

1) 在受信任的根证书颁发机构、个人和受信任的人下的机器证书存储中安装证书

2) 确保“每个人”都拥有对 Crypto/RSA/MachineKeys 文件夹的完全访问权限

3) 使用ServicePointManager.ServerCertificateValidationCallback 覆盖证书验证,以仅返回true 的方法。我可以调试这个方法并观察它返回 true。

仍然在 System.ServiceModel 跟踪中看到了这个:

[0832] SecureChannel#66940002 - 证书名称不匹配。

[0832] SecureChannel#66940002 - 远程证书被用户验证为无效。

应用程序崩溃了: 底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。

【问题讨论】:

    标签: wcf ssl certificate


    【解决方案1】:

    那是因为 ServerCertificateValidationCallback 只做证书验证的 SSL 相关部分。

    因此,如果它仍然损坏,这意味着 不仅 SSL 在这里发挥作用。

    事实上,WS-Trust 是建立在 WS-Security 之上的,而 WS-Security 会对消息的标头进行签名。并且该签名的验证不受 ServerCertificateValidationCallback 的影响。

    您当然有第二个证书签署您的消息的 WS 安全标头。

    有一段不同的代码可以验证该证书的名称是否与端点设置的身份节点中的值匹配,如下所示:

    <endpoint address="..." 
        <identity>
          <dns value="PUT CN OF THE MESSAGE SIGNATURE CERTIFICATE HERE" />
        </identity>
    </endpoint>
    

    如果另外消息签名证书没有验证,您可以通过修改“behaviors/endpointBehaviors/behavior/clientCredentials/serviceCertificate/authentication”来禁用它的验证。 您将此处的 certificateValidationMode 属性设置为“None”。

    或者您将其设置为自定义,然后必须实现您自己的验证器,该验证器派生自 System.IdentityModel.Selectors.X509CertificateValidator 并覆盖验证回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2013-10-30
      • 2020-10-25
      • 2021-10-23
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多