2010-09-03 131 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並重寫驗證回調。