国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于JAAS安全機(jī)制的J2EE Web系統(tǒng)用戶身份認(rèn)證設(shè)計

2011-03-02 07:37劉景林
關(guān)鍵詞:數(shù)字證書用戶名配置文件

劉景林

(泉州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院 信息技術(shù)系,福建 泉州 362000)

基于JAAS安全機(jī)制的J2EE Web系統(tǒng)用戶身份認(rèn)證設(shè)計

劉景林

(泉州經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院 信息技術(shù)系,福建 泉州 362000)

在J2EE Web系統(tǒng)中應(yīng)用JAAS技術(shù)提供的動態(tài)、可插拔認(rèn)證模型實現(xiàn)用戶身份的安全認(rèn)證.通過X.509數(shù)字證書和用戶口令進(jìn)行雙重堆疊認(rèn)證,在Tomcat服務(wù)器上配置實現(xiàn)服務(wù)器與客戶端之間的SSL雙向認(rèn)證,并通過建立HTTPS連接以保護(hù)數(shù)據(jù)的安全傳輸,進(jìn)一步提高系統(tǒng)用戶認(rèn)證的安全性.

JAAS安全機(jī)制;J2EE應(yīng)用系統(tǒng);身份認(rèn)證;數(shù)字證書

隨著Java技術(shù)應(yīng)用的不斷普及,J2EE(Java 2 Platform Enterprise Edition)已日漸成為企業(yè)級軟件開發(fā)的首選平臺,基于J2EE架構(gòu)的Web系統(tǒng)廣泛應(yīng)用于電子政務(wù)、電子商務(wù)及網(wǎng)上銀行等安全性要求較高的領(lǐng)域,但由于互聯(lián)網(wǎng)中存在諸多不安全因素,如何在實現(xiàn)網(wǎng)上業(yè)務(wù)的同時提高系統(tǒng)用戶認(rèn)證和數(shù)據(jù)傳輸?shù)确矫娴陌踩殉蔀橄到y(tǒng)開發(fā)人員關(guān)注的重點.JAAS(Java Authentication and Authorization Service)技術(shù)作為Java2安全體系結(jié)構(gòu)的一個重要組成部分,其主要功能是實現(xiàn)用戶認(rèn)證與訪問控制.JAAS側(cè)重于通過驗證運行代碼的用戶及其權(quán)限來保護(hù)系統(tǒng)免受攻擊,通過在應(yīng)用程序和底層的驗證與授權(quán)機(jī)制之間加入一個抽象層,該抽象層可以簡化涉及到 Java.Security包的程序開發(fā),由于抽象層具有獨立于平臺的特性,使得各種不同的安全機(jī)制和應(yīng)用程序級代碼隔離,從而支持多種不同的安全認(rèn)證方式[1-4].JAAS認(rèn)證建立在可插入的認(rèn)證模塊(Pluggable Authentication Module,PAM)的安全體系結(jié)構(gòu)之上[5],這可使J2EE應(yīng)用系統(tǒng)獨立于底層的認(rèn)證技術(shù),方便其靈活地選擇、修改所使用的認(rèn)證技術(shù),也可以實現(xiàn)多種認(rèn)證機(jī)制的堆疊認(rèn)證,本文基于 JAAS安全機(jī)制在J2EE Web系統(tǒng)實現(xiàn)了用戶身份的安全認(rèn)證.

1 基于JAAS安全機(jī)制的用戶認(rèn)證方案設(shè)計

1.1 創(chuàng)建JAAS登錄配置文件

在使用JAAS安全機(jī)制實現(xiàn)用戶身份認(rèn)證過程中,需要創(chuàng)建一個登錄配置文件以指明系統(tǒng)登錄時所使用的認(rèn)證模塊,該登錄配置文件可以由一個或多個項組成,每個項為某個特定的應(yīng)用指定底層所使用的認(rèn)證模塊.在本例系統(tǒng)中,首先實例化一個登錄上下文LoginContext對象lc,并傳入2個參數(shù):第1個參數(shù)為“JAASExample”,即為登錄配置文件jaas.conf中的一個項的名字,LoginContext將自動讀取并加載登錄配置文件中該項名稱對應(yīng)指定的登錄模塊;創(chuàng)建一個UsrPwdServletCallbackHandler實例對象作為LoginContext初始化時的第2個參數(shù),該類用于獲取認(rèn)證用戶的用戶名和密碼.LoginContext初始化一個新的、空的javax.security.auth.Subject對象,通過使用該 Subject對象和 UsrPwdServletCallbackHandler對象初始化 UserModule認(rèn)證模塊.此時LoginContext將此UsrPwdServletCallbackHandler實例對象轉(zhuǎn)交給參數(shù)“JAASExample”指定的底層認(rèn)證模塊UserModule.當(dāng)認(rèn)證模塊需要與用戶交互獲取用戶名和密碼時,登錄認(rèn)證模塊不直接與用戶打交道,而是通過調(diào)用 UsrPwdServletCallbackHandler對象來執(zhí)行與用戶的交互.一旦構(gòu)建好LoginContext對象之后,就可以利用該對象的login方法執(zhí)行認(rèn)證過程,LoginContext的login方法通過調(diào)用底層認(rèn)證模塊的login方法執(zhí)行具體的登錄認(rèn)證.

1.2 自定義回調(diào)處理器

自定義的用戶交互類UsrPwdServletCallbackHandler實現(xiàn)了CallbackHandler接口,該類用于獲取認(rèn)證信息(如用戶名和密碼),LoginContext將該 CallbackHandler實例對象傳遞給底層的UserModule登錄認(rèn)證模塊.在 UsrPwdServletCallbackHandler()構(gòu)造方法中傳入獲取的用戶名和密碼,首先將用戶名和密碼保存在對象的屬性中,然后提取注冊到其中的所有Callback實例,將用戶名和密碼傳遞給相應(yīng)的Callback實例,該用戶交互類主要實現(xiàn)如下:

以上的handle方法通過遍歷Callback數(shù)組中的各個元素,提取注冊到CallbackHandler中的所有Callback實例,將用戶名和密碼傳遞給相應(yīng)的NameCallback實例和PasswordCallback實例.

1.3 自定義登錄認(rèn)證模塊

當(dāng)系統(tǒng)在執(zhí)行LoginContext對象的login()方法登錄時,將依次自動調(diào)用登錄配置文件中設(shè)置的各個指定登錄模塊的login()方法來實現(xiàn)登錄驗證.本例中分別使用基于用戶口令的登錄認(rèn)證模塊UserModule和基于用戶證書的認(rèn)證模塊CertModule共同實現(xiàn)用戶的身份認(rèn)證,只有全部通過兩種認(rèn)證模塊的驗證才能實現(xiàn)成功登錄.

1.3.1 自定義用戶信息登錄模塊UserModule

用戶個人信息登錄模塊UserModule通過獲取用戶名和密碼實現(xiàn)認(rèn)證.該認(rèn)證模塊給回調(diào)處理器的handle()方法傳遞一個適當(dāng)?shù)腃allback類型的callbacks字節(jié)數(shù)組,callbacks含有用于獲取用戶名的NameCallback類型對象和用于獲取密碼的PasswordCallback類型對象,然后CallbackHandler執(zhí)行所請求的用戶交互,并將適當(dāng)?shù)闹荡嫒隿allbacks數(shù)組,登錄認(rèn)證模塊通過從callbacks數(shù)組中獲取用戶名與密碼.最后由自定義的UserProxy類訪問MySQL數(shù)據(jù)庫中的用戶信息表,通過調(diào)用validateUser()方法以驗證輸入的用戶登錄信息是否與數(shù)據(jù)庫用戶表中某一用戶信息相匹配.

1.3.2 自定義證書認(rèn)證模塊CertModule

證書認(rèn)證模塊CertModule主要實現(xiàn)客戶證書的驗證.首先在Tomcat服務(wù)器中配置HTTPS安全協(xié)議和雙向SSL認(rèn)證,當(dāng)用戶通過HTTPS方式訪問Web站點時,則要求出示客戶證書.人同一CA頒發(fā)的所有證書都有一個唯一的、不重復(fù)的證書序列號,因此可利用證書序列號作為用戶身份的標(biāo)志.服務(wù)器獲取客戶證書并將客戶數(shù)字證書存到當(dāng)前會話的“javax.servlet.request.X509 Certificate”屬性中,在CertModule登錄模塊的login()方法中將得到的客戶證書的序列號與MySQL數(shù)據(jù)庫中保存的證書序列號字段進(jìn)行比較,以認(rèn)證用戶身份.在讀取客戶端數(shù)字證書時,可以使用request.getAttribute()方法獲得X509Certificate數(shù)組,再讀取X509Certificate對象中的序列號.

2 系統(tǒng)測試

2.1 系統(tǒng)開發(fā)環(huán)境

本系統(tǒng)的軟件開發(fā)測試平臺是基于JDK1.5,J2EE Web服務(wù)器使用Apache Tomcat5.5,用戶個人身份信息存放于MySQL5.0開源數(shù)據(jù)庫.

2.2 系統(tǒng)設(shè)計的關(guān)鍵步驟

1)構(gòu)建并布署J2EE Web應(yīng)用

創(chuàng)建名稱為myApp的J2EE Web應(yīng)用,其文檔結(jié)構(gòu)和系統(tǒng)登錄頁面如圖1所示.

圖1中的login.jsp為系統(tǒng)測試用的登錄頁面,loginprocess.jsp為登錄處理頁面,實現(xiàn)成功登錄時轉(zhuǎn)入訪問系統(tǒng)資源,否則提示出錯,要求重新進(jìn)行登錄.在auth文件夾中存放自定義的登錄認(rèn)證模塊UserModule和CertModule以及自定義的回調(diào)處理器類UsrPwdServletCallbackHandler.java;在WEB-INF文件夾的classes存放auth文件夾中所有java源程序相應(yīng)的.class文件以及第三方的jar包.最后將整個系統(tǒng)打包生成myApp.war文件,將該文件復(fù)制到Tomcat的安裝目錄下的webapps文件夾進(jìn)行布署.

圖1 J2EE Web應(yīng)用文檔結(jié)構(gòu)與登錄頁面

2)利用OpenSSL工具構(gòu)建數(shù)字證書

使用OpenSSL構(gòu)建自簽名根證書,并使用該根證書分別簽發(fā)服務(wù)器證書和客戶證書,由于CA根證書為自簽發(fā)的,未經(jīng)權(quán)威CA認(rèn)證,因此應(yīng)將根證書分別導(dǎo)入到服務(wù)器與客戶機(jī)瀏覽器中的“受信任的根證書頒發(fā)機(jī)構(gòu)”中;在服務(wù)器端分別將根證書和服務(wù)器證書復(fù)制到Tomcat安裝目錄下的conf文件夾;在客戶機(jī)瀏覽器中導(dǎo)入客戶證書,以便服務(wù)器與客戶端相互認(rèn)證對方的證書.另外,要實現(xiàn)客戶機(jī)的證書認(rèn)證,還必須將所頒發(fā)的客戶證書的序列號及用戶個人信息存放在MySQL數(shù)據(jù)庫中的用戶信息表.

3)配置Tomcat服務(wù)器

首先在Apache tomcat 5.5中的“configure Tomcat”項中指定JAAS登錄配置文件jaas.conf的位置(如圖2),以便告知Java虛擬機(jī)JAAS配置文件的所在位置,也可通過修改%JAVA_HOME%jrelib security文件夾下的 java.security文件,在其中添加一行代碼“java.security.auth.login.config= d:myAppWEB-INFjaas.conf”來實現(xiàn),其中“d:myApp”為J2EE應(yīng)用系統(tǒng)所在的文件夾,最后啟動Tomcat服務(wù)器.

接下來在Tomcat服務(wù)器中配置HTTPS安全協(xié)議及雙向 SSL認(rèn)證,編輯 Tomcat安裝目錄下的confserver.xml文件如下:

圖2 Tomcat中配置JAAS登錄配置文件

其中clientAuth設(shè)置為“true”,意味著服務(wù)器與客戶機(jī)之間實現(xiàn)相互提交證書進(jìn)行認(rèn)證[5].

4)客戶機(jī)通過HTTPS方式訪問服務(wù)器

當(dāng)客戶通過瀏覽器以HTTPS方式訪問系統(tǒng)服務(wù)器時,要進(jìn)行客戶證書的確認(rèn).在系統(tǒng)登錄過程中出現(xiàn)要求提交客戶證書的對話框時,用戶可以選擇所使用的客戶端數(shù)字證書,服務(wù)器獲取客戶證書并提取其證書序列號進(jìn)行驗證,當(dāng)用戶名與口令以及客戶數(shù)字證書的驗證都通過之后才能成功登錄系統(tǒng)進(jìn)行訪問.

3 結(jié)論

在J2EE Web系統(tǒng)用戶登錄驗證過程中,利用JAAS提供的動態(tài)、可插拔認(rèn)證模型實現(xiàn)基于用戶口令與X509數(shù)字證書的雙重堆疊認(rèn)證,使用服務(wù)器證書與客戶證書實現(xiàn)雙方相互間的 SSL雙向認(rèn)證,并通過HTTPS連接實現(xiàn)數(shù)據(jù)的安全傳輸.實踐證明,該認(rèn)證方案相對于基于用戶口令或數(shù)字證書等其他單方面認(rèn)證,既可以實現(xiàn)服務(wù)器對客戶端的雙重認(rèn)證,有效防止非授權(quán)用戶的非法訪問,較好地解決系統(tǒng)用戶的安全認(rèn)證問題,又可以實現(xiàn)客戶端對服務(wù)器的認(rèn)證,防止登錄到假冒的服務(wù)器,同時能保證認(rèn)證雙方所傳輸數(shù)據(jù)的安全,進(jìn)一步增強(qiáng)了Web系統(tǒng)的安全性.

[1]彭超,馬丁.新一代JSP網(wǎng)絡(luò)編程入門與實踐[M].北京:清華大學(xué)出版社,2007:310.

[2]馬臣云,王彥.精通PKI網(wǎng)絡(luò)安全認(rèn)證技術(shù)與編程實現(xiàn)[M].北京:人民郵電出版社,2008:398-400.

[3]梁棟.Java加密與解密的藝術(shù)[M].北京:機(jī)械工業(yè)出版社,2010:341-350.

[4]羅銳,程文青.Java安全體系在Web程序中的研究和應(yīng)用[J].計算機(jī)應(yīng)用與研究,2006(7):113-114.

[5]朱福喜,傅建明,唐曉軍.JAVA項目設(shè)計與開發(fā)范例[M].北京:電子工業(yè)出版社,2005:253.

The Design of User Identity Authentication in J2EE Web System Based on JAAS Security Mechanism

LIU Jing-lin
(Department of Information Technology,Quanzhou Vocational and Technical College of Economy and Trade,Quanzhou 362000,China)

In the J2EE Web application system,JAAS technology is used to provide a dynamic, pluggable authentication model to achieve the authentication of user security,i.e.,through the double stack authentication of X.509 digital certification and user authentication password.The SSL mutual authentication is set up in the Tomcat to achieve authentication between the server and client and HTTPS connections are established to protect the security of data transmission and further improve the security of user authentication.

JAAS security;J2EE applications;authentication;digital certification

?

TP309

A

1006-7302(2011)03-0074-05

2011-03-24

劉景林(1971—),男,福建省泉州人,講師,碩士,研究方向為J2EE應(yīng)用開發(fā)、網(wǎng)絡(luò)安全.

猜你喜歡
數(shù)字證書用戶名配置文件
《護(hù)士進(jìn)修雜志》投稿程序
《護(hù)士進(jìn)修雜志》投稿程序
無線網(wǎng)絡(luò)安全認(rèn)證研究
《護(hù)士進(jìn)修雜志》投稿程序
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心設(shè)計與實現(xiàn)
忘記ESXi主機(jī)root密碼怎么辦
為View桌面準(zhǔn)備父虛擬機(jī)
機(jī)智的快遞員
當(dāng)心黑客利用數(shù)字證書的漏洞
永福县| 阳高县| 宿松县| 大安市| 都兰县| 五莲县| 巴林左旗| 万源市| 沙河市| 青田县| 澄迈县| 柳江县| 文山县| 广西| 井陉县| 龙江县| 西丰县| 龙井市| 南乐县| 太仓市| 肇州县| 平乡县| 施秉县| 罗定市| 定州市| 左贡县| 崇州市| 木兰县| 大渡口区| 莱芜市| 屯门区| 抚松县| 临澧县| 罗城| 正镶白旗| 禄丰县| 外汇| 聊城市| 上栗县| 留坝县| 灵川县|