天天看點

WCF分布式開發常見錯誤(27):Secure channel cannot be opened

    這個問題是周宏偉在調試WCF分布式安全開發實踐(12):消息安全模式之自定義X509證書驗證:Message_CustomX509Certificate_WSHttpBinding 。發現并提出來的,我幫助調試,找到了問題的解決辦法。發出來一起分享給大家。

【1.問題描述】:

    1.項目類型:IIS托管的WCF服務。

    2.安全類型:消息安全模式+ 自定義X509證書驗證。+WSHttpBinding :Message_CustomX509Certificate_WSHttpBinding

   3.用戶端類型:ASP.NET 網站。

   4.錯誤資訊:Secure channel cannot be opened because security negotiation with the remote endpoint has failed. This may be due to absent or incorrectly specified EndpointIdentity in the EndpointAddress used to create the channel. Please verify the EndpointIdentity specified or implied by the EndpointAddress correctly identifies the remote endpoint.

  安全通道無法打開,因為安全與遠端終結點協商已經失敗。這可能是由于在EndpointAddress 缺少或不正确指定用于建立通道的EndpointIdentity。請驗證EndpointIdentity指定或暗示的EndpointAddress正确辨別遠端終結點。

   5.錯誤截圖:

WCF分布式開發常見錯誤(27):Secure channel cannot be opened

【2.問題分析】:

     導緻這個問題的可能原因有2個:

(1)沒有服務端配置安全選項。

(2)服務沒有啟動。

    網上的同樣的問題也很多,但是沒有什麼幫助。這裡針對2個Web類型的應用項目。在調試的時候容易出現這樣的問題。

【3.解決方案】:

  原因(1):

         檢查服務配置,證書設定:

            <wsHttpBinding>

                <binding name="MyBindingConfigration">

                    <security mode="Message">

                        <transport clientCredentialType="None"/>

                        <message clientCredentialType="Certificate"/>

                    </security>

                </binding>

            </wsHttpBinding>

     原因(2):由于一個解決方案裡包含2個項目,是以要保證服務啟動。步驟如下:

            這個問題的關鍵在于,你雖然設定了證書,這裡錯誤提示是,與服務終結點協商失敗,原因不是證書。

            是整數辨別的服務,沒有啟動,導緻協商錯誤。你右鍵-》Debug->啟動新的執行個體,先把服務啟動。

            然後在右鍵-》Debug->啟動新的用戶端項目執行個體。這樣單步調試就通過了。

            我把證書名稱換為我本機的證書,你記得根據自己的證書名稱修改配置檔案。

參考連結:

http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/f1d4e572-5871-48da-8dc3-8195a42f7c94

繼續閱讀