基于JAAS安全机制的J2EE Web系统用户身份认证设计

2011-03-02 07:37刘景林
关键词:数字证书用户名配置文件

刘景林

(泉州经贸职业技术学院 信息技术系,福建 泉州 362000)

基于JAAS安全机制的J2EE Web系统用户身份认证设计

刘景林

(泉州经贸职业技术学院 信息技术系,福建 泉州 362000)

在J2EE Web系统中应用JAAS技术提供的动态、可插拔认证模型实现用户身份的安全认证.通过X.509数字证书和用户口令进行双重堆叠认证,在Tomcat服务器上配置实现服务器与客户端之间的SSL双向认证,并通过建立HTTPS连接以保护数据的安全传输,进一步提高系统用户认证的安全性.

JAAS安全机制;J2EE应用系统;身份认证;数字证书

随着Java技术应用的不断普及,J2EE(Java 2 Platform Enterprise Edition)已日渐成为企业级软件开发的首选平台,基于J2EE架构的Web系统广泛应用于电子政务、电子商务及网上银行等安全性要求较高的领域,但由于互联网中存在诸多不安全因素,如何在实现网上业务的同时提高系统用户认证和数据传输等方面的安全,已成为系统开发人员关注的重点.JAAS(Java Authentication and Authorization Service)技术作为Java2安全体系结构的一个重要组成部分,其主要功能是实现用户认证与访问控制.JAAS侧重于通过验证运行代码的用户及其权限来保护系统免受攻击,通过在应用程序和底层的验证与授权机制之间加入一个抽象层,该抽象层可以简化涉及到 Java.Security包的程序开发,由于抽象层具有独立于平台的特性,使得各种不同的安全机制和应用程序级代码隔离,从而支持多种不同的安全认证方式[1-4].JAAS认证建立在可插入的认证模块(Pluggable Authentication Module,PAM)的安全体系结构之上[5],这可使J2EE应用系统独立于底层的认证技术,方便其灵活地选择、修改所使用的认证技术,也可以实现多种认证机制的堆叠认证,本文基于 JAAS安全机制在J2EE Web系统实现了用户身份的安全认证.

1 基于JAAS安全机制的用户认证方案设计

1.1 创建JAAS登录配置文件

在使用JAAS安全机制实现用户身份认证过程中,需要创建一个登录配置文件以指明系统登录时所使用的认证模块,该登录配置文件可以由一个或多个项组成,每个项为某个特定的应用指定底层所使用的认证模块.在本例系统中,首先实例化一个登录上下文LoginContext对象lc,并传入2个参数:第1个参数为“JAASExample”,即为登录配置文件jaas.conf中的一个项的名字,LoginContext将自动读取并加载登录配置文件中该项名称对应指定的登录模块;创建一个UsrPwdServletCallbackHandler实例对象作为LoginContext初始化时的第2个参数,该类用于获取认证用户的用户名和密码.LoginContext初始化一个新的、空的javax.security.auth.Subject对象,通过使用该 Subject对象和 UsrPwdServletCallbackHandler对象初始化 UserModule认证模块.此时LoginContext将此UsrPwdServletCallbackHandler实例对象转交给参数“JAASExample”指定的底层认证模块UserModule.当认证模块需要与用户交互获取用户名和密码时,登录认证模块不直接与用户打交道,而是通过调用 UsrPwdServletCallbackHandler对象来执行与用户的交互.一旦构建好LoginContext对象之后,就可以利用该对象的login方法执行认证过程,LoginContext的login方法通过调用底层认证模块的login方法执行具体的登录认证.

1.2 自定义回调处理器

自定义的用户交互类UsrPwdServletCallbackHandler实现了CallbackHandler接口,该类用于获取认证信息(如用户名和密码),LoginContext将该 CallbackHandler实例对象传递给底层的UserModule登录认证模块.在 UsrPwdServletCallbackHandler()构造方法中传入获取的用户名和密码,首先将用户名和密码保存在对象的属性中,然后提取注册到其中的所有Callback实例,将用户名和密码传递给相应的Callback实例,该用户交互类主要实现如下:

以上的handle方法通过遍历Callback数组中的各个元素,提取注册到CallbackHandler中的所有Callback实例,将用户名和密码传递给相应的NameCallback实例和PasswordCallback实例.

1.3 自定义登录认证模块

当系统在执行LoginContext对象的login()方法登录时,将依次自动调用登录配置文件中设置的各个指定登录模块的login()方法来实现登录验证.本例中分别使用基于用户口令的登录认证模块UserModule和基于用户证书的认证模块CertModule共同实现用户的身份认证,只有全部通过两种认证模块的验证才能实现成功登录.

1.3.1 自定义用户信息登录模块UserModule

用户个人信息登录模块UserModule通过获取用户名和密码实现认证.该认证模块给回调处理器的handle()方法传递一个适当的Callback类型的callbacks字节数组,callbacks含有用于获取用户名的NameCallback类型对象和用于获取密码的PasswordCallback类型对象,然后CallbackHandler执行所请求的用户交互,并将适当的值存入callbacks数组,登录认证模块通过从callbacks数组中获取用户名与密码.最后由自定义的UserProxy类访问MySQL数据库中的用户信息表,通过调用validateUser()方法以验证输入的用户登录信息是否与数据库用户表中某一用户信息相匹配.

1.3.2 自定义证书认证模块CertModule

证书认证模块CertModule主要实现客户证书的验证.首先在Tomcat服务器中配置HTTPS安全协议和双向SSL认证,当用户通过HTTPS方式访问Web站点时,则要求出示客户证书.人同一CA颁发的所有证书都有一个唯一的、不重复的证书序列号,因此可利用证书序列号作为用户身份的标志.服务器获取客户证书并将客户数字证书存到当前会话的“javax.servlet.request.X509 Certificate”属性中,在CertModule登录模块的login()方法中将得到的客户证书的序列号与MySQL数据库中保存的证书序列号字段进行比较,以认证用户身份.在读取客户端数字证书时,可以使用request.getAttribute()方法获得X509Certificate数组,再读取X509Certificate对象中的序列号.

2 系统测试

2.1 系统开发环境

本系统的软件开发测试平台是基于JDK1.5,J2EE Web服务器使用Apache Tomcat5.5,用户个人身份信息存放于MySQL5.0开源数据库.

2.2 系统设计的关键步骤

1)构建并布署J2EE Web应用

创建名称为myApp的J2EE Web应用,其文档结构和系统登录页面如图1所示.

图1中的login.jsp为系统测试用的登录页面,loginprocess.jsp为登录处理页面,实现成功登录时转入访问系统资源,否则提示出错,要求重新进行登录.在auth文件夹中存放自定义的登录认证模块UserModule和CertModule以及自定义的回调处理器类UsrPwdServletCallbackHandler.java;在WEB-INF文件夹的classes存放auth文件夹中所有java源程序相应的.class文件以及第三方的jar包.最后将整个系统打包生成myApp.war文件,将该文件复制到Tomcat的安装目录下的webapps文件夹进行布署.

图1 J2EE Web应用文档结构与登录页面

2)利用OpenSSL工具构建数字证书

使用OpenSSL构建自签名根证书,并使用该根证书分别签发服务器证书和客户证书,由于CA根证书为自签发的,未经权威CA认证,因此应将根证书分别导入到服务器与客户机浏览器中的“受信任的根证书颁发机构”中;在服务器端分别将根证书和服务器证书复制到Tomcat安装目录下的conf文件夹;在客户机浏览器中导入客户证书,以便服务器与客户端相互认证对方的证书.另外,要实现客户机的证书认证,还必须将所颁发的客户证书的序列号及用户个人信息存放在MySQL数据库中的用户信息表.

3)配置Tomcat服务器

首先在Apache tomcat 5.5中的“configure Tomcat”项中指定JAAS登录配置文件jaas.conf的位置(如图2),以便告知Java虚拟机JAAS配置文件的所在位置,也可通过修改%JAVA_HOME%jrelib security文件夹下的 java.security文件,在其中添加一行代码“java.security.auth.login.config= d:myAppWEB-INFjaas.conf”来实现,其中“d:myApp”为J2EE应用系统所在的文件夹,最后启动Tomcat服务器.

接下来在Tomcat服务器中配置HTTPS安全协议及双向 SSL认证,编辑 Tomcat安装目录下的confserver.xml文件如下:

图2 Tomcat中配置JAAS登录配置文件

其中clientAuth设置为“true”,意味着服务器与客户机之间实现相互提交证书进行认证[5].

4)客户机通过HTTPS方式访问服务器

当客户通过浏览器以HTTPS方式访问系统服务器时,要进行客户证书的确认.在系统登录过程中出现要求提交客户证书的对话框时,用户可以选择所使用的客户端数字证书,服务器获取客户证书并提取其证书序列号进行验证,当用户名与口令以及客户数字证书的验证都通过之后才能成功登录系统进行访问.

3 结论

在J2EE Web系统用户登录验证过程中,利用JAAS提供的动态、可插拔认证模型实现基于用户口令与X509数字证书的双重堆叠认证,使用服务器证书与客户证书实现双方相互间的 SSL双向认证,并通过HTTPS连接实现数据的安全传输.实践证明,该认证方案相对于基于用户口令或数字证书等其他单方面认证,既可以实现服务器对客户端的双重认证,有效防止非授权用户的非法访问,较好地解决系统用户的安全认证问题,又可以实现客户端对服务器的认证,防止登录到假冒的服务器,同时能保证认证双方所传输数据的安全,进一步增强了Web系统的安全性.

[1]彭超,马丁.新一代JSP网络编程入门与实践[M].北京:清华大学出版社,2007:310.

[2]马臣云,王彦.精通PKI网络安全认证技术与编程实现[M].北京:人民邮电出版社,2008:398-400.

[3]梁栋.Java加密与解密的艺术[M].北京:机械工业出版社,2010:341-350.

[4]罗锐,程文青.Java安全体系在Web程序中的研究和应用[J].计算机应用与研究,2006(7):113-114.

[5]朱福喜,傅建明,唐晓军.JAVA项目设计与开发范例[M].北京:电子工业出版社,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应用开发、网络安全.

猜你喜欢
数字证书用户名配置文件
《护士进修杂志》投稿程序
《护士进修杂志》投稿程序
无线网络安全认证研究
《护士进修杂志》投稿程序
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心设计与实现
忘记ESXi主机root密码怎么办
为View桌面准备父虚拟机
机智的快递员
当心黑客利用数字证书的漏洞