有关CAS服务器配置以及作为cas服务器客户端程序的配置方法介绍
由于CAS要求使用https和客户端进行通信,所以需要配置Tomcat支持SSL,为了实现SSL,一个Web服务必须对每一个接受安全连接的外部接口或者IP地址有一个相关联的证书,数字证书的获取一般从像verisign或者Thawte这样的著名证书颁发机构(Certificate Authority CA)购买证书,或者如果身份验证并不很重要,比如管理员只是希望保证服务器发送和接收的数据是私有的并且不能被连接中的任何者探听到,则可以只是使用自签名的证书,从而省去获取CA证书的时间和成本。此处使用自签名证书作为客户端与服务器端安全通信的凭证。
本节描述创建一个名为server.keystore的服务器keystore以及名为client.keystore的客户端keystore。这两个文件构成一个密钥对。这些文件通常是在<TOMCAT_HOME>目录中或者在应用程序目录中创建的。
我们使用keytool工具创建keystore文件。可以在<JAVA_HOME>/bin目录中找到keytool工具。
1. 生成密钥对
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore
2 将服务器证书导出为证书文件:
keytool -export -alias tomcat-server -storepass changeit -file server.cer -keystore server.keystore
输入密码(changeit):
Keytool返回下列消息:
Certificate stored in file <server.cer>
3 用keytool在所选的keystore文件中创建客户端证书:
keytool -genkey -alias tomcat-client -keyalg RSA -keypass changeit -storepass changeit -keystore client.keystore
4 将新客户端证书从keystore导出到证书文件:
keytool -export -alias tomcat-client -storepass changeit -file client.cer -keystore client.keystore
输入keystore密码(changeit)。Keytool将返回该消息:
Certificate stored in file <client.cer>
5 将上述步骤所得到的tomcat根目录下server.cer以及client.cer证书文件导入到cacerts 文件中,
cacerts文件默认生成在tomcat根目录下
keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit
keytool -import -trustcacerts -alias client -file client.cer -keystore cacerts -storepass changeit
6在tomcat根目录下找到cacerts文件,拷贝到<JAVA_HOME>\jre\lib\security文件下
从下载得cas-server3最新版本中找到target文件下面得cas.war,拷贝到<TOMCAT_HOME>/webapp目录下
,修改<TOMCAT_HOME>/conf下面得server.xml文件,添加如下:
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="/server.keystore" keystorePass="changeit"/>
7 CAS默认设置为只要用户名和密码相同,即可进行登录,这在现实使用中是不允许的。我们修改为使用MySQL的test数据库中的app_user表作为用户数据源。首先,我们在test库中创建一个表:
CREATE TABLE `app_user` (
`username` varchar(30) NOT NULL default '',
`password` varchar(45) NOT NULL default '',
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
并添加如下用户:
INSERT INTO `app_user` (`username`,`password`) VALUES
('dianne','emu'),
('marissa','koala'),
('peter','opal'),
('scott','wombat');
用编辑器打开%CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml,找到
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
注释掉该行,在其下加入:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from app_user where username=?" />
<property name="dataSource" ref="dataSource" />
</bean>
并添加一个bean:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/test</value></property>
<property name="username"><value>test</value></property>
<property name="password"><value>test</value></property>
</bean>
拷贝cas-server-jdbc-3.0.5-rc2.jar和mysql-connector-java-3.1.12-bin.jar到%CATALINA_HOME%/webapps/cas/WEB-INF/lib下。
8启动startup.bat,运行tomcat之后,新打开得浏览器中输入:https://localhost:8443即可看到安全连接对话框,选择之后可以看到正常运行得tomcat!
---此时 ,cas服务器端配置已经完成,只要配置客户端之后即可通过cas认证服务器来实现各个子系统之间得单点统一登陆!
客户端配置如下:
1 打开客户端得web.xml文件,添加如下
<!-- CAS Filters -->
<filter>
<filter-name>CASFilter</filter-name>
<filter-class>
edu.yale.its.tp.cas.client.filter.CASFilter
</filter-class>
<init-param>
<param-name>
edu.yale.its.tp.cas.client.filter.loginUrl
</param-name>
<param-value>https://localhost:8443/cas/login</param-value>
</init-param><!--这里的server是服务端的IP-->
<init-param>
<param-name>
edu.yale.its.tp.cas.client.filter.validateUrl
</param-name>
<param-value>
https://localhost:8443/cas/proxyValidate
</param-value>
</init-param><!--这里的serName是服务端的主机名,而且必须是-->
<init-param>
<param-name>
edu.yale.its.tp.cas.client.filter.serverName
</param-name>
<param-value>localhost:8443</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port-->
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/secure/*</url-pattern><!--这里的设置是针对servlets-examples的,针对jsp-examples设置为/*-->
</filter-mapping>
2 然后拷贝从cas-server网站上下载到的casclient.jar文件到客户端的lib下面即可;
cas服务器以及客户端全部部署完毕后,即可通过cas统一认证服务器来实现应用系统中的单点登陆,从而把登陆认证的部分逻辑从
子系统中剥离出来交给cas认证服务器来做!