首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WCF 分散式開發常見錯誤 (24):無法為 SSL/TLS 建立信任關係

     編輯:關於.NET

錯誤現象

Could not establish trust relationship for the SSL/TLS secure channel with authority 'computer:9001'.

場景

  • 傳輸安全模式(Transport),服務端憑證 WCFHTTPS,客戶端無憑證驗證(clientCredentialType="None")。
  • 服務端配置 mexHttpsBinding,基址 https://computer:9001/。

根因

客戶端不信任服務端憑證的發行鏈(自簽憑證無受信任根 CA)。

解決方案

方案一:程式碼繞過驗證(僅限開發/測試)

public static class Util {
    public static void SetCertificatePolicy() {
        ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidate;
    }
    private static bool RemoteCertificateValidate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) {
        Console.WriteLine("Warning: trust any certificate");
        return true; // 接受所有憑證
    }
}

// 調用前執行一次
Util.SetCertificatePolicy();
var proxy = new WCFServiceClient("WSHttpBinding_IWCFService");
var result = proxy.SayHello("Frank");

方案二:建立受信任根 CA 並簽發憑證(生產級做法)

  1. 建立根 CA 憑證(可用 makecert -n "CN=MyRootCA" -r -sv MyRootCA.pvk MyRootCA.cer)。
  2. 將根 CA 安裝至雙端「受信任的根憑證授權單位」存儲區。
  3. 用根 CA 簽發伺服器/客戶端憑證(makecert -iv MyRootCA.pvk -ic MyRootCA.cer -n "CN=WCFServer" -sky exchange -pe -sr localmachine -ss My)。
  4. 配置服務端使用該憑證,客戶端自動信任。

參考:CodePlex WCFSecurity 專案指引

總結

  • 學習/測試階段:方案一最快,但嚴禁用於生產。
  • 正式部署:必須採用方案二,引入受信任 CA 體系。
  • WCF 安全開發涉及憑證建立、匯入、HTTP.SYS 註冊、存儲區權限等多環節,建議建立標準化腳本/文檔避免遺漏。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved