国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用 JAAS 和 JSSE 實現Java 安全性

2019-11-18 15:18:54
字體:
來源:轉載
供稿:網友

  對 J2EE Web 應用程序安全體系結構的簡要介紹
級別:入門

Kyle Gabhart (kyle@gabhart.com)
顧問,Gabhart Communications

在 J2EE 探索者 的這期文章中,企業 java 開發人員和教育家 Kyle Gabhart 介紹了 Java 認證和授權服務(Java Authentication and Authorization Service,JAAS)和 Java 安全套接字擴展(Java Secure Socket Extension,JSSE)。跟隨作者去發現如何結合這兩個 API 以提供 J2EE Web 應用程序安全框架的核心功能:認證、授權和傳輸層安全。請在本文對應的 討論論壇 上與作者及其他讀者分享您對本文的心得(您也可以通過單擊文章頂部或底部的討論來訪問該論壇)。
從早期所謂的 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 及其 Principals,以及 Subject 要執行的特權操作(讀/寫到文件系統、數據庫訪問,等等)。Security Manager 會咨詢與 Principals 和權限相關聯的策略文件。 假如一個 Subject 的 Principals 具有執行指定操作的權限,那么就對這個 Subject 授權并答應操作,否則就會拒絕這項操作并拋出一個 SecurityException。

補充安全方面的知識
要全面、實際地了解 Java 安全模型,請參閱 Brad Rubin 的兩部分教程:

Java安全性第一部分 密碼學基礎
Java安全性 第二部分 認證與授權

用 JSSE 進行安全傳輸
有了 JAAS ,我們就可以識別訪問系統的用戶并限制他們只能訪問授權使用的那部分系統。雖然 JAAS 是邁向安全 Web 應用程序堅實的第一步,但是假如沒有安全傳輸,那么應用程序安全性仍然是不完整的。

這里,我們仍然是以明文形式??即 HTTP、TCP/IP、FTP等??傳遞安全信息(包括認證信息)。所以我們需要保證數據在傳輸時不會被未授權的人訪問。我們還需要保證數據在到達之前,沒有在傳輸過程中修改過,不管這種修改是有意的還是無意的。我們可以利用安全套接字層(SSL)和傳輸層安全性(Transport Layer Security,TLS)協議實現這兩種功能。

SSL 和 TLS 不是特定于 Java 的協議,它們是為維護通過套接字的數據的完整性和私密性而設計的網絡層協議。Java 安全套接字擴展(JSSE)利用 SSL/TLS 可以進行安全的 Internet 通信,它提供了一個具有完整功能的應用程序框架??一個 Java 版本的 SSL 和 TLS 協議,這些功能包括數據加密、服務器認證、消息完整性,等等。使用 JSSE,我們可以定義運行任意應用程序協議??包括 HTTP、TCP/IP、FTP,甚至 Telnet??的客戶機與服務器之間的安全套接字連接。從數據加密的角度看,JSSE 結合了許多與 JCE 中使用的同樣的概念和算法。不過更重要的是,在簡單流套接字 API 背后,它會在必要時自動使用它們。

要利用 JSSE API,我們只需要做簡單的幾件事。首先我們需要獲得 JSSE 提供程序(請參閱 參考資料)。其次,我們需要從一個 JSSE 套接字工廠而不是直接從 java.net.Socket 類獲得套接字。客戶端代碼從 SSLSocketFactory 獲取套接字,而服務器端代碼從 SSLServerSocketFactory 獲取套接字。通過從這些工廠獲取套接字,我們就可以利用 JSSE 提供程序提供的框架,而不是像 java.net 包答應我們所作的那樣,簡單地創建標準的、不安全的套接字。

有關 JSSE 的更多細節,請參閱 參考資料。

結束語
Java 平臺以其巖石般堅固的安全性聞名。每一年 Java 安全性框架都會變得更靈活和更健壯,JAAS 和 JSSE 的加入表明這個傳統將會繼續發揚光大。

本月,我們快速回顧了保證 Java Web 應用程序安全的技術。JAAS 提供了對用戶進行認證和控制訪問資源的模塊化機制。JSSE 提供了 SSL 和 TSL 協議的 Java 實現以支持數據完整性和私密性。下個月,我們將探討 servlet 過濾器的全新世界。那時再見,祝您探索快樂!

參考資料

請在 討論論壇 上參與本文的討論。(您也可以通過單擊文章頂部或底部的 討論 來訪問論壇。)

您將熟悉到 Brad Rubin 的包含兩部分的 Java 安全教程 Java安全性第一部分 密碼學基礎 和 Java安全性 第二部分 認證與授權(developerWorks,2002 年 7 月)是學習更多關于 Java 平臺的 Web 應用程序安全體系結構的完美起點。

在“保護系統安全:一個識別用戶的三向解決方案”(developerWorks,2001 年 6 月)中,Joseph Sinclair 描繪了在企業系統中保證 Web 安全的基本挑戰,并提供了如何用 JAAS 克服這些挑戰的簡要介紹。

從 Carlos Fonseca 的“擴展JAAS實現類實例級授權”(developerWorks,2002 年 4 月)一文中學習有關如何使用 JAAS 保護企業應用程序的安全的實用內容。

在教程“將JSSE用于安全套接字通信”(developerWorks,2002 年 4 月)中,Java 專區的定期撰稿人 Greg Travis 帶領您完成了使用 Java 安全套接字擴展的最困難和最重要的部分??創建并安裝 JSSE 加密密鑰。

在“為高級 JSSE 開發人員定制 SSL”(developerWorks,2002 年 9 月)中,作者 Ian Parkinson 為您展示了如何使用 JSSE 定制安全套接字層連接的屬性。

參閱 Vipin Samar 和 Charlie Lai 的“Making Login Services Independent of Authentication Technologies”(java.sun.com)以了解有關 PAM 框架的更多內容。

Jamie Jaworski 的“Secure your sockets with JSSE”(OnJava.com,2001 年 5 月)對 JSSE 作了介紹。

JSSE Reference Guide 是學習有關 Java 平臺上安全傳輸內容的重要資源。

要得到并運行 Java 安全套接字擴展,您將需要一個 JSSE 提供程序,如 IBMJSSE。

有關 Java 安全性的問題,可以訪問由 Java 安全專家 Dr. Paul Abbott 主持的 Java security discussion forum。

閱讀全部 J2EE 探索者 系列。

在 developerWorks Java 技術專區 可以找到數百篇有關 Java 編程各個方面的文章。

關于作者
Kyle Gabhart 是 J2EE、xml 和 Web 服務技術方面的獨立顧問和專家。Kyle 是一位很受歡迎的公眾演講者,以其對新技術的熱情、生動的分析和陳述而聞名。要獲取他最近以及即將舉行的演講或者業內出版物的信息,請訪問 Gabhart.com。您可以通過 kyle@gabhart.com 與 Kyle 聯系。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉门市| 巩留县| 凤凰县| 尉犁县| 伽师县| 五指山市| 内丘县| 毕节市| 乌兰浩特市| 开阳县| 东乡族自治县| 新巴尔虎左旗| 八宿县| 广灵县| 包头市| 寻乌县| 仪征市| 邯郸市| 岗巴县| 云霄县| 永吉县| 方城县| 丰台区| 九江市| 龙泉市| 达孜县| 天台县| 陆丰市| 安吉县| 德阳市| 新源县| 临潭县| 灯塔市| 股票| 基隆市| 綦江县| 巍山| 淮南市| 星子县| 郯城县| 扎鲁特旗|