考量網際網路的開放本質,設計一套保護客戶端與伺服器免於各種攻擊的安全架構至關重要。Web 的安全議題大多與在客戶端和伺服器之間建立安全通道有關。

SSL 與 TLS#

Web 上建立安全通道的主流做法是使用安全通訊端層(Secure Socket Layer, SSL),最初由 Netscape 實作。SSL 從未被正式標準化,但多數 Web 客戶端與伺服器都支援它。SSL 的更新版已正式載於 RFC 2246 與 RFC 3546,即**傳輸層安全(Transport Layer Security, TLS)**協定。

  • TLS 是與應用程式無關的安全協定,邏輯上疊在傳輸協定之上;為求簡單,TLS(與 SSL)的實作通常以 TCP 為基礎。
  • TLS 可支援多種高層協定,包括 HTTP;例如也可以用 TLS 實作安全版本的 FTP 或 Telnet。

圖 12-22:TLS 在網際網路協定堆疊中的位置

TLS 本身分為兩層,核心是 TLS 記錄協定層(record protocol layer),負責實作客戶端與伺服器之間的安全通道。通道的確切特性在建立時決定,可包括訊息分段與壓縮,並與訊息鑑別、完整性、機密性一併套用。

建立安全通道#

建立安全通道分兩個階段進行:

  • 第一階段(協商):客戶端告知伺服器自己能處理的密碼演算法與支援的壓縮方法;實際選擇永遠由伺服器做,並把選擇回報給客戶端。
  • 第二階段(鑑別)
    • 伺服器一律必須鑑別自己:把內含其公鑰、由憑證機構(certification authority, CA)簽署的憑證交給客戶端。
    • 若伺服器要求鑑別客戶端,客戶端也得把憑證送給伺服器。
    • 客戶端產生一個亂數(雙方將用它建構會談金鑰,session key),以伺服器的公鑰加密後送給伺服器;若需要客戶端鑑別,客戶端還會用自己的私鑰簽署該亂數(實際上是另送一則含攪亂並簽署版本亂數的訊息,效果相同)。
    • 此時伺服器可以驗證客戶端的身分,安全通道即告建立。

圖 12-23:具相互鑑別的 TLS

伺服器鑑別是強制的、客戶端鑑別是選配的——這就是 TLS 支援「相互鑑別」但日常瀏覽多半只驗證伺服器的原因。