使用 HTTP 做為傳輸時,安全套接字層 (SSL) 實作會提供安全性。 SSL 在因特網上廣泛使用,向客戶端驗證服務,然後將機密性(加密)提供給通道。 本文說明 SSL 的運作方式,以及它在 Windows Communication Foundation (WCF) 中實作的方式。
基本 SSL
SSL 的運作方式最好透過一般案例來說明,在此案例中為銀行的網站。 網站可讓客戶使用使用者名稱和密碼登入。 通過驗證之後,使用者可以執行交易,例如檢視帳戶餘額、支付帳單,以及將資金從一個帳戶移至另一個帳戶。
當使用者第一次瀏覽網站時,SSL 機制會開始與使用者的用戶端進行一系列交涉,稱為 交握(在此案例中為網頁瀏覽器)。 SSL 會先向客戶驗證銀行網站。 這是一個重要步驟,因為客戶必須先知道他們正在與實際網站通訊,而不是試圖誘騙他們輸入使用者名稱和密碼的詐騙。 SSL 會使用受信任的授權單位所提供的 SSL 憑證來進行這項驗證,例如 VeriSign。 邏輯如下所示:VeriSign 為銀行網站的身份提供擔保。 因為瀏覽器信任 VeriSign,因此網站是受信任的。 如果您想要檢查 VeriSign,也可按一下 VeriSign 標誌。 此文件提供了真實性聲明,其中列出了到期日及簽發對象(銀行網站)。
若要起始安全會話,用戶端會將對等的 「hello」 傳送至伺服器,以及可用來簽署、產生哈希,以及用來加密和解密的密碼編譯演算法清單。 作為回應,網站會傳回一個確認,並選擇其中一個演算法套件。 在這個初始交握期間,雙方都會傳送和接收 Nonces。 Nonce 是隨機產生的數據片段,該數據會與網站的公鑰搭配使用,以建立哈希。 哈希是使用標準演算法衍生自兩個數位的新數位,例如SHA1。 (用戶端和網站也會交換訊息,就同意要使用的哈希演算法。哈希是唯一的,僅適用於用戶端與網站之間的會話,用於訊息的加密和解密。 用戶端和服務都有原始 Nonce 和憑證的公鑰,因此雙方可以產生相同的哈希。 因此,用戶端會使用已同意的演算法來驗證服務所傳送的哈希,以計算數據中的哈希,並將它與服務所傳送的哈希進行比較;如果兩者相符,則客戶端會保證哈希未遭到竄改。 然後,用戶端可以使用此哈希作為密鑰來加密包含另一個新哈希的訊息。 服務可以使用哈希來解密訊息,並復原這個第二到最終的哈希。 累積的資料(nonces、公鑰和其他數據)現在對雙方都是已知的,並且可以生成一個最終的哈希,進而創建主要密鑰。 最後一個金鑰會使用下一個到最後一個哈希來傳送加密。 接著,主要金鑰會用來加密和解密會話其餘部分的訊息。 因為客戶端和服務都使用相同的密鑰,因此也稱為 會話密鑰。
會話金鑰也描述為對稱金鑰或「共享密碼」。擁有對稱密鑰很重要,因為它可減少交易雙方所需的計算。 如果每個訊息都要求新的隨機數和雜湊值交換,效能就會惡化。 因此,SSL 的最終目標是使用對稱密鑰,讓訊息在雙方之間自由流動,且安全性與效率更高。
先前的描述是所發生情況的簡化版本,因為通訊協定可能會因月臺到月臺而有所不同。 用戶端和網站也有可能在握手期間產生演算法結合的臨時數字,以增加複雜性,因此保護交換數據的過程。
憑證和公鑰基礎結構
在交握期間,服務也會將其SSL憑證傳送給用戶端。 憑證包含資訊,例如其到期日、發行授權單位,以及網站的統一資源標識碼(URI)。 用戶端會比較 URI 與其原本連絡的 URI,以確保相符,也會檢查日期和發行授權單位。
每個憑證都有兩個金鑰、一個私鑰和一個公鑰,而兩個憑證稱為 交換密鑰組。 簡言之,只有在公鑰可從憑證讀取時,憑證的擁有者才知道私鑰。 任一密鑰都可以用來加密或解密摘要、哈希或其他密鑰,但只能做為相反作業。 例如,如果用戶端使用公鑰加密,則只有網站可以使用私鑰解密訊息。 如果網站使用私鑰加密,用戶端可以使用公鑰解密。 這可向客戶端保證訊息只會與私鑰擁有者交換,因為只有使用私鑰加密的訊息可以使用公鑰解密。 網站可確保其正在與使用公鑰加密的用戶端交換訊息。 此交換僅在初始交握時是安全的,因此需要進行更多的步驟來建立實際的對稱密鑰。 不過,所有通訊都取決於具有有效 SSL 憑證的服務。
使用 WCF 實作 SSL
HTTP 傳輸安全性 (或 SSL) 是在 WCF 外部提供。 您可以使用下列兩種方式之一來實作 SSL:決定因素是您的應用程式裝載方式:
如果您使用 Internet Information Services (IIS) 作為 WCF 主機,請使用 IIS 基礎結構來設定 SSL 服務。
如果您要建立自我裝載的 WCF 應用程式,您可以使用 HttpCfg.exe 工具,將 SSL 憑證系結至位址。
使用 IIS 保護傳輸安全
IIS 7.0
若要將 IIS 7.0 設定為安全主機(使用 SSL),請參閱 在 IIS 7.0 中設定安全套接字層。
若要設定憑證以搭配 IIS 7.0 使用,請參閱 在 IIS 7.0 中設定伺服器證書。
IIS 6.0
若要將 IIS 6.0 設定為安全主機(使用 SSL),請參閱 設定安全套接字層。
若要設定憑證以搭配 IIS 6.0 使用,請參閱 Certificates_IIS_SP1_Ops。
使用 HttpCfg 進行 SSL 設定
如果您要建立自我裝載的 WCF 應用程式,請使用 HttpCfg.exe 工具。
如需使用 HttpCfg.exe 工具來設定具有 X.509 憑證之埠的詳細資訊,請參閱 如何:使用 SSL 憑證設定埠。