
文档目的
书写该文档主要是配置CAS Server端的配置。
参考文献
大部分是网友写的博客还有简略看一些官方材料。
术语与缩写解释
| 缩写、术语 | 解 释 |
| SSO | 即Single sign on/off,单点登录/退出 |
| CAS | 全称JA-SIG Central Authentication Service,实现SSO的开源项目 |
| … |
1.1 基本原理
首先,在我们修改之间,先了解以下CAS运行基本原理。CAS服务器,客户端(应用),浏览器的序列图如下:
其中:
ST:Service Ticket,用于客户端应用持有,每个ST对应一个用户在一个客户端上
TGT:Ticket Granting Ticket,存储在CAS服务器端和用户cookie两个地方
CAS服务器持有ST与TGT+客户端的映射关系,客户端持有ST与用户Session的映射关系,在renew的情况下,每次客户端根据用户 Session将ST发送给CAS服务器端,服务器端检验ST是否存在即可知道此用户是否已登陆。在普通情况下,用户第一次登陆应用时,客户端将用户页面 重定向到CAS服务器,服务器取出用户cookie中的TGT,检验是否在服务器中存在,若存在则生成ST返回给客户端 (若不存在则要求登陆,登陆成功后同样返回ST给客户端),客户端拿到ST后再发送给CAS服务器认证是否为真实ST,认证成功即表示登陆成功
我们可以看到,其实我们需要做的就是第2步中返回的登陆页面由服务器改放到客户端,然后让第3步中由用户在客户端上输入用户名密码但提交到CAS服务器端,登陆成功与失败都将转向客户端。
1.2 系统环境
Window 7 旗舰版、 jdk1.7.0、apache-tomcat-6.0.32
Java环境变量: D:\\Program Files\\Java\\jdk1.7.0
1.3 下载资源
服务器端:http://downloads.jasig.org/cas/
当前最新版本cas-server-3.4.11-release.zip
客户端:http://downloads.jasig.org/cas-clients/
当前最新客户端版本 cas-client-3.2.1-release.zip
2 配置 CAS Server
2.1 简单配置
把你下载cas-server-3.4.11-release解压,进入cas-server-3.4.11\\modules,复制cas-server-webapp-3.4.11.war到apache-tomcat-6.0.32\webapps下,修改名称为cas.war,方便使用,原来的名字太长了。启动tomcat,然后启动IE,输入http://localhost:8080/cas检验是否可以访问,如果可以,则输入相同的用户名和密码,比如cas/cas,测试是否能登录。
如果出现如下界面,那么恭喜你第一阶段完成了。可以进行关联数据库和证书的操作。
2.2数据库验证配置
简单配置后,可以使用相同的用户名和密码,进行登录。这个不实际,可以通过配置实现连接自己的数据库进行配置。这里有个前提,就是所有系统需要使用相同的用户表和密码加密方法,可以使用CAS自带的加密方法(\\org\\jasig\\cas\\authentication\\handler\\ DefaultPasswordEncoder.class)或自己用JAVA写的加密方法。
进入目录apache-tomcat-6.0.32\\webapps\\cas\\WEB-INF,打开文件deployerConfigContext.xml,找到类似下面的代码:
这是默认的方法。同时还有两种可选,如下:
/************************************************************************/
以上两种方式都经过测试。另外,也可以写出自己的方法验证,修改BEAN的CLASS属性即可。如果没有密码没有加密,则可以把参数
说明:参考配置完的Cas-Server中我使用的第三种方案,所以应该把默认的注释。
下面针对最下面的方法进行说明。
看它的属性,还需要定义两个BEAN,数据源和加密,如下:
注:把这些配置文件复制到deployerConfigContext.xml中的时候不要有任何中文字符和特殊字符。因为有的工具解析的时候会有异常信息。所以我们不要在配置文件中包含任何非法字符。
如出现以下错误:
[/WEB-INF/deployerConfigContext.xml];nested exception is com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 2 字节的 UTF-8 序列的字节 2 无效。
如果出现上述错误删除配置文件中的特殊字符即可。
由于CAS-SERVER.WAR默认没有采用数据库加密,所以部分JAR包,没有引入,下面这些需要复制到webapps\\cas\\WEB-INF\\lib里面:
Cas-server-support-jdbc-3.3.3.jar //这两个文件在cas-server-3.4.11\\modules文件夹下
Cas-server-support-ldap-3.3.3.jar
Commons-dbcp.jar // apache-tomcat-6.0.32\\lib下就能找到,或者从apache官方下载
Commons-pool.jar // 从apache官方下载
Org.springframework.jdbc-3.0.0.M4.jar //spring默认的包内含有该两个文件
Org.springframework.transaction-3.0.0.M4.jar
Oraclejdbc.jar // 我使用的是Oracle
完成以后,用户表数据准备好后,可以运行http://localhost:8080/cas进行登录测试。这个时候很容易出现错误,多数是因为JAR包问题,查看apache-tomcat-6.0.32\\logs日志缺少哪些jar文件。
2.3 可选参数配置
Cas默认是启用https协议进行验证的,如果不向启用https则需要配置如下3个文件。
1、apache-tomcat-6.0.32\\webapps\\cas\\WEB-INF\deployerConfigContext.xml
增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不启用。 2、apache-tomcat-6.0.32\\webapps\\cas\\WEB-INF\\spring-configuration\ ticketGrantingTicketCookieGenerator.xml p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" /> 参数p:cookieSecure="true",同理为HTTPS验证相关,TRUE为采用HTTPS验证,与deployerConfigContext.xml的参数保持一致。 参数p:cookieMaxAge="-1",简单说是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的IE窗口有效,IE关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意IE窗口,都不需要验证。 2.4 HTTPS验证配置 证书的制作使用keytool工具,进入CMD,输入keytool,回车测试,如果出现帮助,则说明环境变量配置正确,如果没有,则配置PATH,加入%JAVA_HOME%\\bin。 制作证书 下面开始制作,先找好存放证书的位置:如D:\\key keytool -genkey -alias greatsoft –keystore greatsoft -keyalg RSA -validity 3666 参数说明: -keyalg使用加密的算法,这里是RSA -alias密钥的别名 -keypass私有密钥的密码,这里设置为123456 -keystore 密钥保存在D:\key目录下的greatsoft文件中 -storepass 存取密码,这里设置为123456,这个密码提供系统从greatsoft文件中将信息取出 -validity该密钥的有效期为 180天 注:名字与姓氏要输入主机名或域名或localhost,如果Cas-Server和Cas-Client在同一台计算机上可以使用localhost,在局域网内可以计算机名称。 建议:最好使用域名,这个域名可以是一个网络中不真实、不存在的域名。如果这个域名对于Cas-Server不是真实的话,需要在客户端配置DNS的虚拟映射(C:\\Windows\\System32\\drivers\\etc\\hosts)。 导出证书 keytool -export -alias greatsoft -keystore greatsoft -file greatsoft.crt 这一步是把密钥库导出为证书文件: 2.5 自定义页面 CAS页面文件放在Tomcat 6.0\\webapps\\cas\\WEB-INF\\view\\jsp中,页面配置文件在Tomcat 6.0\\webapps\\cas\\WEB-INF\\classes中,比如default_views.properties,在这里指定登录用哪个页面,注销用哪个页面等等。 在Tomcat 6.0\\webapps\\cas\\WEB-INF\\cas.properties文件指定使用哪个皮肤页面。 下面开始操作: 1、进入Tomcat 6.0\\webapps\\cas\\WEB-INF\\view\\jsp,复制default文件夹,并改名,再复制回来,如myth。 2、进入Tomcat 6.0\\webapps\\cas\\WEB-INF\\classes,复制default_views.properties,并改名再复制回来,如myth_views.properties。打开文件,把里面的目录.修改为自己的路径,如.。 3、进入Tomcat 6.0\\webapps\\cas\\WEB-INF,打开cas.properties文件,修改 cas.viewResolver.basename=myth_views 完成以上3步后,打开IE,进入http://localhost:8080/cas进行测试,如果成功则进行下一步。 注意:文件中logout使用的类。 4、修改页面样式 最后一点说明,Tomcat 6.0\\webapps\\cas\\WEB-INF\\cas-server.xml中,有个BEAN: 这个不要修改,否则出现http code 500 for url 。 2.6应用证书到Web服务器-apache-tomcat 说是应用起始做的事情就是启用Web服务器(Tomcat)的SSL,也就是HTTPS加密协议,为什么加密我就不用啰嗦了吧…… 准备好一个干净的tomcat,本教程使用的apache-tomcat-6.0.32 打开tomcat目录的conf/server.xml文件,开启83和87行的注释代码,并设置keystoreFile、keystorePass修改结果如下: clientAuth="false" sslProtocol="TLS" keystoreFile="D:/keys/greatsoft" keystorePass="123456" /> 参数说明: keystoreFile:制作证书key存放位置。 这里要说明的是,这里的greatsoft指的是密钥库文件,而不是证书文件(greatsoft.crt)。 keystorePass:创建证书时的密码 好了,到此Cas-Server的SSL启用完成,现在你可以启动tomcat试一下了,例如本教程输入地址:https://localhost:8443/cas 另外:在启动apache-tomcat-6.0.32时候如果出现如下警告,但是访问应用程序正常: 警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxTheads' to '500' did not find a matching property. 2010-7-4 20:49:35 org.apache.catalina.startup.SetAllPropertiesRule begin 警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'minSpareTheads' to '100' did not find a matching property. 2010-7-4 20:49:35 org.apache.catalina.startup.SetAllPropertiesRule begin 警告: [SetAllPropertiesRule]{Server/Service/Connector} Setting property 'maxSpareTheads' to '300' did not find a matching property. 通过网上搜索,具体解决方法如下: server.xml中的配置HTTPS的那部分Connector代码 clientAuth="false" sslProtocol="TLS" keystoreFile="你的.keystore文件" /> 将protocol参数由"HTTP/1.1"改成"org.apache.coyote.http11.Http11Protocol",重新启动Tomcat,搞定! 根据Tomcat官方的文档http://tomcat.apache.org/tomcat-6.0-doc/config/http.html,"HTTP/1.1"和"org.apache.coyote.http11.Http11Protocol"是一样的,但是不知道为什么前者会出错而后者就是对的,而且HTTP部分的Connector用的也是"HTTP/1.1"。 这个警告很是离奇,更改后就会解决。
