2010-09-03 26 views
1

我在智慧的结尾,我希望你能帮助我。我试图通过使用自签名证书,将WIF从Web应用程序转移到Web服务的活动WS-Trust身份验证。在WCF中使用自签名SSL证书ws2007FederationBinding

我已经试过如下:

1)机证书存储在受信任的根证书颁发机构,个人和受信任人

2)确保“人人”安装证书已经完全进入加密/ RSA/MachineKeys文件夹

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

STILL看到这个在System.ServiceModel跟踪:

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

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

该应用程序爆炸: 底层连接已关闭:无法建立SSL/TLS安全通道的信任关系。

回答

0

这是因为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> 

如果除了消息签名证书未验证,您可以通过修改“behavior/endpointBehaviors/behavior/clientCredentials/serviceCertificate/authentication”来禁用它的验证。 您将certificateValidationMode属性设置为“无”。

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