![](/img/trans.png)
[英]WCF Service over SSL Could not establish secure channel for SSL/TLS with authority 'test-service.hostname.com'
[英]Could not establish secure channel for SSL/TLS with authority 'xxxxx.com'
我正在嘗試使用 VS2013 和 WCF 針對客戶的 SOAP 網絡服務編寫客戶端。 網絡服務本身在他們的防火牆后面,所以他們建立了一個我試圖聯系的代理。 (代理似乎是使用 MuleSoft 的 ESB 實現的,這可能相關,也可能不相關。)
我得到了一個 https: url 和一個用戶名/密碼。 當我將 url 加載到瀏覽器中時,系統會提示我輸入用戶名/密碼,然后我看到了 .wsdl。 .wsdl 指定了一個我無法訪問的內部 url,但我認為這是針對實際站點的。
當我在 VS2013 中創建一個服務引用時,使用代理 URL,我被提示輸入用戶名/密碼三次,然后我得到一個正確的客戶端,app.config 中的設置等。
app.config 中生成的綁定用於具有安全模式傳輸的 basicHttpBinding,以及指向該無法訪問的內部 url 的端點地址。
因此,從生成的綁定中,我:
將安全模式更改為“TransportWithMessageCredentials”
<bindings> <basicHttpBinding> <binding name="MyCustomersServiceSoapBinding"> <security mode="TransportWithMessageCredential" > <message clientCredentialType="UserName" /> </security> </binding> <binding name="MyCustomersServiceSoapBinding1" /> </basicHttpBinding> </bindings>
用用戶名和密碼替換 ClientCredentials:
使用 (var client = new MyCustomersServiceClient()) { var loginCredentials = new ClientCredentials(); loginCredentials.UserName.UserName = "用戶名"; loginCredentials.UserName.Password = "apassword";
var defaultCredentials = client.Endpoint.Behaviors.Find<ClientCredentials>(); client.Endpoint.Behaviors.Remove(defaultCredentials); client.Endpoint.Behaviors.Add(loginCredentials); var myData = new MyData { }; var result = client.receiveData(myData);
}
當我運行它時,我得到一個異常:
無法為具有“xxxxx.com”權限的 SSL/TLS 建立安全通道。
瀏覽了一下,我發現的大部分內容都表明 ssl 證書存在問題,但我不確定這是否有意義。 如果是這種情況,我希望在通過瀏覽器查看 .wsdl 時會看到問題。 我認為通過刪除默認客戶端憑據,我將繞過證書檢查。 我看到了一些關於更模糊問題的帖子,這些問題導致了同樣的錯誤消息。
我已經打開了 SOAP 消息日志記錄,但這並沒有為我提供任何信息。 它顯示了失敗的傳出消息,但沒有任何用處。
所以我一直在關注 Fiddler 的流量。 我看到兩條消息,一條到“隧道到”的 HTTP 消息,結果為 200,一條 HTTPS 消息到代理 url,結果為 401。
在這一點上,我看到了兩種可能性:
我傾向於后者。 我的問題? 我對托管服務的系統一無所知。 我在我認為是 WCF 的常用機制中傳遞用戶名/密碼,但它不起作用。
所以,最后,問題:
不確定我遇到的問題是否與您的問題有相同的原因,但以防萬一我可以幫助某人解決這個問題,添加requireClientCertificate=true
解決了我的問題:
<bindings>
<customBinding>
<binding name="bindingName">
...
<httpsTransport requireClientCertificate="true"/>
</binding>
</customBinding>
</bindings>
我有同樣的錯誤消息,但我使用的 Web 服務是通過 HTTPS 的,並且需要 SSL 證書作為身份驗證。
許多端點最近一直在禁用 TLSV1.0 和 TLSV1.1
嘗試:
CURL https://<<service host>> -v -TLSV1.0
和
CURL https://<<service host>> -v -TLSV1.2
例如, https: //www.comodo.com 不允許 TLSV1.0 或 TLSV1.1,但允許 TLSV1.2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.