我的智慧已尽,我希望你能帮我。我正在尝试使用一个自签名的证书,使用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安全通道建立信任关系。
发布于 2011-12-05 07:32:05
这是因为ServerCertificateValidationCallback只执行证书验证中与SSL相关的部分。
因此,如果它仍然坏了,这意味着这里不仅有 SSL。
事实上,WS是建立在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派生并重写验证回调。
https://stackoverflow.com/questions/3638600
复制相似问题