用JAAS 和 JSSE 實現 Java 安全性

從早期所謂的 Java 沙箱到 JDK 1.4 引入的健壯的、全功能的安全體系結構,安全性一直是 Java 平臺的基本組件。從那時到現在,Java 語言的設計者收到了來自團體的大量關於安全的 Java 應用程序(或者企業環境)可以做什麼和不做什麼的意見,他們自己也添加了若干技巧。

  從早期所謂的 Java 沙箱到 JDK 1.4 引入的健壯的、全功能的安全體系結構,安全性一直是 Java 平臺的基本組件。從那時到現在,Java 語言的設計者收到了來自團體的大量關於安全的 Java 應用程序(或者企業環境)可以做什麼和不做什麼的意見,他們自己也添加了若干技巧。

  可以說隨着 J2EE Web 應用程序安全體系結構的引入,我們不斷從近 10 年的反覆試驗有所收穫,事實也表明了這一點。J2EE 安全框架由三個 API 組成:Java 認證和授權服務(JAAS)、Java 安全套接字擴展(JSSE)和 Java 加密擴展(Java Cryptography Extension,JCE)。雖然 JCE 是一個有意思和重要的 API,但是它與我們所關注的安全 Web 應用程序開發的“三大項”――認證、授權和傳輸――並不特別相關。所以在本月的專欄中我們將集中講述 JAAS 和 JSSE。

  JAAS 和 JSSE 概述

  JAAS 提供了一種靈活的、說明性的機制,用於對用戶進行認證並驗證他們訪問安全資源的能力。JSSE 定義了通過安全套接字層(SSL)進行安全 Web 通信的一種全 Java 的機制。通過結合這兩種技術,可以使我們的應用程序:

  驗證用戶就是他或者她所宣稱的那個人(認證)。

  保證允許他或者她訪問所要求的資源(授權)。

  通過安全網絡連接進行完整的信息交換(傳輸)。

  現在,我們來看每一個基礎的功能組件。

  用 JAAS 進行認證

  JAAS 建立在一種稱爲可插入的認證模塊(Pluggable Authentication Module,PAM)的安全體系結構之上。PAM 的體系結構是 模塊化的,這意味着它設計爲可以通過交換模塊,支持從一個安全協議組件無縫地轉換到另一個協議組件。這個框架中定義良好的接口使得無需改變或者干擾任何現有的登錄服務就可以加入多種認證技術和授權機制。PAM 體系結構可以集成範圍廣泛的認證技術,包括 RSA、DCE、Kerberos 以及 S/Key,因而 JAAS 也可以集成這些技術。此外,這個框架與基於智能卡的認證系統和 LDAP 認證兼容。

  就像許多 Java 2 平臺技術一樣,JAAS API 定義了應用程序代碼與將要執行業務邏輯的物理實現之間乾淨的抽象。這個抽象層不用重新編譯現有的應用程序代碼就可以作爲登錄模塊的運行時替代。特別是,應用程序寫到 LoginContext API,而認證技術提供程序則寫到 LoginModule 接口。在運行時, LoginContext 將讀取配置文件以確定應使用哪一個(一些)登錄模塊對訪問特定應用程序的用戶進行認證。

  JAAS 所使用的認證方案以兩種非常重要的實體爲基礎:principal 和 subject。實際被認證的人或者服務稱爲 subject。 principal是一個惟一的實體,比如個人或者組的名字、帳號、社會安全號或者類似的惟一標識。爲了惟一標識一個 subject(這是認證的關鍵部分),一個或者多個 principal 必須與這個 subject 相關聯。最後,一個 subject 可能擁有安全相關的屬性,稱爲 憑證(credential)。憑證可以是從簡單的密碼到複雜的加密密鑰的任何東西。

  應用程序通過實例化一個 LoginContext 對象開始認證過程。 LoginContext 查詢一個配置文件以確定進行認證所使用的一種(或者多種)認證技術以及相應的一個(或者多個) LoginModule 。一個非常簡單的 LoginModule 可能會提示輸入用戶名和密碼並對它們進行驗證。高級一點的可能會使用現有的操作系統登錄身份進行身份驗證。理論上,甚至可以將一個 JAAS LoginModule 構建成與指紋識別器或者虹膜掃描儀交互。

  用 JAAS 進行授權

  認證只是 Java 安全框架任務的一半。當用戶的身份被確認後,必須對他或者她的訪問權限進行檢查。只有確認了適當的權限後,用戶纔可以訪問安全的系統或者資源。

  換一種說法,驗證了用戶或者服務的身份後,就創建一個 Subject 對象來表示經過驗證的實體。然後 JAAS 將這個對象傳遞給任何爲保護對敏感系統或資源的訪問而建立的授權組件。

  要確定授權,可以向 Java 2 Security Manager 提供 Subject 及其 Principal s,以及 Subject 要執行的特權操作(讀/寫到文件系統、數據庫訪問,等等)。Security Manager 會諮詢與 Principal s 和權限相關聯的策略文件。 如果一個 Subject 的 Principal s 具有執行指定操作的權限,那麼就對這個 Subject 授權並允許操作,否則就會拒絕這項操作並拋出一個 SecurityException 。

發佈了25 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章