CAS单点登入SSO配置说明
安装环境Tomcat7.0JDK6CAS SERVER 3.5.1,下载地址 http://www.jasig.org/cas/downloadCAS CLIENT 3.2.1,下载地址 http://downloads.jasig.org/cas-clients/?C=M;O=D常用命令-genkey:在用户主目录创建一个默认文件“.keystore”,还会产生一个mykey的别名,makey中包含用户的公钥、私钥和证书-alias:产生别名-keystore:指定密钥库的名称-keyalg:指定密钥的算法-validity:指定创建证书有效期多少天-keysize:指定密钥长度-storepass:指定密钥库的密码-keypass:指定别名条目的密码-dname:指定证书拥有者信息-list:显示密钥库中证书信息-v:显示密钥库中证书的详细信息-export:将别名指定的证书导出到文件-file:参数指定导出的文件到文件名-delete:删除密钥库中某条目-keypasswd:修改密钥库中指定条目口令-import:将已签名数字证书导入密钥库创建证书
证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书,这里使用JDK自带的keytools工具生成证书,
如果以后真正在产品环境中使用肯定要去证书提供商去购买。
用JDK自带的keytool工具生成证书:
keytool -genkey -alias cas -keyalg RSA -keystore f:/resources/cas

C:\Windows\System32\drivers\etc\hosts
添加内容如下:
127.0.0.1 sso.rying.com
这样在访问sso.rying.com的时候其实是访问的127.0.0.1也就是本机
F:\resources>keytool -export -file f:/resources/cas.crt -alias wsria -keystore f:/resources/cas
输入密码,提交。


keytool -import -keystore E:\develop\Java\jdk1.6.0_37\jre\lib\security\cacerts -file f:\resources\cas.crt -alias cas


至此证书的创建、导出、导入到客户端JVM都已完成
点击继续,进入tomcat欢迎页面,OK。
CAS服务器配置下载完成后解压到 F:\resources,把 F:\resources\cas-server-3.5.1\modules\cas-server-webapp-3.5.1.war 重命名为cas.war,复制到tomcat webapp下面访问 https://sso.rying.com:8443/cas/login,看到登入页面:
用户名密码相同就能登入成功了。
CAS链接数据源登入配置上面的初体验仅仅是简单的身份验证,实际应用中肯定是要读取数据库的数据,下面我们来进一步配置CAS服务器怎么读取数据库的信息进行身份验证。首先打开
tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml
找到
配置说明:QueryDatabaseAuthenticationHandler:cas-server-support-jdbc提供的查询接口其中一个,QueryDatabaseAuthenticationHandler是通过配置一个 SQL 语句查出密码,与所给密码匹配。
如果需要使用密码加密,可以创建一个类继承 org.jasig.cas.authentication.handler.PasswordEncoder,然后在encode中加密用户输入的密码返回即可。
如果需要在代码中获取用户名密码进行验证,可以创建一个类继承 org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler,重写
authenticateUsernamePasswordInternal方法。
CAS客户端配置eclipse下新建一个web项目,从F:\resources\cas-client-3.2.1\modules导入jar包cas-client-core-3.2.1.jar
commons-logging-1.1.jar
配置web.xml,添加以下内容:
页面跳转到CAS系统登入页面,输入用户名密码
登入成功,返回hello.html页面,并且带上了jsessionid。
注意:这里可能会抛出异常 sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target解决办法:导入证书到jre中,方法同导入到jdk中的jre。keytool -import -keystore E:\develop\Java\jre6\lib\security\cacerts -file f:\resources\cas.crt -alias cas
看下是否添加成功:keytool -list -keystore E:\develop\Java\jre6\lib\security\cacerts
此时,再创建一个CASClient2,项目同CASClient,使用CASClient访问hello.html并且登入成功之后,我们访问CASClient2的hello.html
可以看到同样带上了jsessionid,登入成功。
访问 https://sso.rying.com:8443/cas/logout 测试注销,出现注销成功页面,OK。如果注销成功想回到登入页面,可以修改cas-servlet.xml文件,在logoutController的bean配置中修改p:followServiceRedirects="${cas.logout.followServiceRedirects:false} 为 true
修改 logout路径,并加上service属性,为需要重定向页面地址原来路径:https://sso.rying.com:8443/cas/logout 现在:https://sso.rying.com:8443/cas/logout ?service=http://localhost:8080/CASClient/login.html界面美化CAS服务器登入页面在\webapps\cas\WEB-INF\view\jsp\default\ui下登入页面:casLoginView.jsp登入成功页面:casGenericSuccess.jsp登出页面:casLogoutView.jsp自己修改替换这些文件就可以了。