一、概述
此文的目的就是为了帮助初步接触SSO和CAS的人员提供一个入门指南,一步一步演示如何实现基于CAS的单点登录。
CAS的官网:http://www.jasig.org/cas
二、演示环境
本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下:
- windows732位
- JDK 1.6.0_18
- Tomcat 6.0.29
- CAS-server-3.4.11、CAS-client-3.2.1
根据演示需求,用修改hosts 文件的方法添加域名,在文件 C:\Windows\System32\drivers\etc\hosts 文件中添加三条
127.0.0.1 demo.tch.com
127.0.0.1 app1.tch.com
127.0.0.1 app2.tch.com
- demo.tch.com =>>对应部署cas server的tomcat,这个虚拟域名还用于证书生成
- app1.tch.com =>> 对应部署app1的tomcat
- app2.tch.com =>>对应部署app2的tomcat
三、JDK安装配置
因为cas是java框架,需要在JVM中运行,所以需要配置安装和配置JDK。可参考娟姐博客
四、安全证书配置
CAS默认使用的是HTTPS协议,如果对安全要求不高,可使用HTTP协议。
修改deployerConfigContext.xml 增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用。
<beanclass="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"
p:requireSecure="false" />
修改ticketGrantingTicketCookieGenerator.xml(cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml) 中ticketGrantingTicketCookieGenerator p:cookieSecure 属性 修改为 false。
<beanid="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false" p:cookieMaxAge="-1"p:cookieName="CASTGC" p:cookiePath="/cas" />
使用HTTPS协议,步骤如下:
4.1. 生成证书:
keytool-genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass 123456 -validity 365-keystore F:\Study\Java\Projects\SSO\Demo\keys\ssodemo.keystore -storepass123456
ps:
- 截图中需要输入的姓名和上面hosts文件中配置的一致;
- keypass 和 storepass 两个密码要一致,否则下面tomcat 配置https 访问失败;
4.2.导出证书:
keytool-export -alias ssodemo -keystoreF:\Study\Java\Projects\SSO\Demo\keys\ssodemo.keystore -fileF:\Study\Java\Projects\SSO\Demo\keys\ssodemo.crt -storepass 123456
4.3.客户端导入证书:
keytool-import -keystore E:\Environment\java\Java1.6\jre\lib\security\cacerts -fileF:\Study\Java\Projects\SSO\Demo\keys\ssodemo.crt -alias ssodemo
ps:该命令中输入的密码和上面输入的不是同一个密码;如果是多台机器演示,需要在每一台客户端导入该证书。
有关keytool工具的详细运用见:http://www.micmiu.com/lang/java/keytool-start-guide/
五、部署CAS-Server相关的Tomcat
5.1.配置HTTPS
解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为F:\Study\Java\Projects\SSO\Demo\tomcat-cas,在文件 conf/server.xml文件找到:
<!--
<Connectorport="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https"secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
修改成如下:
<Connectorport="8443"protocol="org.apache.coyote.http11.Http11Protocol"SSLEnabled="true"
maxThreads="150" scheme="https"secure="true"
keystoreFile="F:/Study/Java/Projects/SSO/Demo/keys/ssodemo.keystore"keystorePass="123456"
clientAuth="false" sslProtocol="TLS"URIEncoding="UTF-8"/>
参数说明:
- keystoreFile 就是4.1中创建证书的路径
- keystorePass 就是4.1中创建证书的密码
5.2.验证HTTPS配置
其他按照默认配置不作修改,双击%TOMCAT_HOME%\bin\startup.bat启动tomcat-cas 验证https访问配置:
如果看到上述界面表示https访问配置成功。
5.3部署CAS-Server
CAS-Server下载地址:http://www.jasig.org/cas/download
本文以cas-server-3.4.11-release.zip为例,解压提取cas-server-3.4.11/modules/cas-server-webapp-3.4.11.war文件,把改文件copy到 G:\sso\tomcat-cas\webapps\目下,并重命名为:cas.war.
启动tomcat-cas,在浏览器地址栏输入:https://demo.tch.com:8443/cas/login ,回车
CAS-server的默认验证规则:只要用户名和密码相同就认证通过(仅仅用于测试,生成环境需要根据实际情况修改),输入admin/admin 点击登录,就可以看到登录成功的页面:
看到上述页面表示CAS-Server已经部署成功。
CAS默认使用的是HTTPS协议,如果对安全要求不高,可使用HTTP协议。
修改deployerConfigContext.xml 增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用。
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false" />
修改 ticketGrantingTicketCookieGenerator.xml (cas/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml) 中 ticketGrantingTicketCookieGenerator p:cookieSecure 属性 修改为 false。
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false" p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas" />