簡體   English   中英

無法為具有“xxxxx.com”權限的 SSL/TLS 建立安全通道

[英]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 的端點地址。

因此,從生成的綁定中,我:

  1. 用我得到的代理 url 替換無法訪問的內部 url。
  2. 將安全模式更改為“TransportWithMessageCredentials”

     <bindings> <basicHttpBinding> <binding name="MyCustomersServiceSoapBinding"> <security mode="TransportWithMessageCredential" > <message clientCredentialType="UserName" /> </security> </binding> <binding name="MyCustomersServiceSoapBinding1" /> </basicHttpBinding> </bindings>
  3. 用用戶名和密碼替換 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。

在這一點上,我看到了兩種可能性:

  1. 我需要按照錯誤消息建議的方式安裝 SSL 證書,或者
  2. 問題只是我沒有以它理解的方式向服務提供用戶名/密碼,並且它拒絕了我的連接嘗試。

我傾向於后者。 我的問題? 我對托管服務的系統一無所知。 我在我認為是 WCF 的常用機制中傳遞用戶名/密碼,但它不起作用。

所以,最后,問題:

  • 我是否誤導了自己,我確實需要弄亂 SSL 證書?
  • 如果沒有,我在 WCF 中如何將用戶名/密碼傳遞給由 MuleSoft ESB 托管的 HTTPS 網絡服務? (Mule EE Core Extensions/3.5.1,如果有幫助的話)。

不確定我遇到的問題是否與您的問題有相同的原因,但以防萬一我可以幫助某人解決這個問題,添加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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM