术语:css
CAS(Central Authentication Service)
TGT(Ticket Granting Ticket)
ST(Service Ticket)
PGT(Proxy Granting Ticket)html
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 须要独立部署,主要负责对用户的认证工做;CAS Client 负责处理对客户端受保护资源的访问请求,须要登陆时,重定向到 CAS Server。图1 是 CAS 最基本的协议过程:java
图 1. CAS 基础协议web
复杂的应用场景,具体介绍能够参考 CAS 官方网站上的相关文档。apache
一、 客户端介质cas-client-java-2.1.1.zipapi
二、 服务端介质cas-server-3.3.3-release.zip浏览器
三、 Tomcat6.0缓存
四、 JDK6.0tomcat
(1) JDK环境变量配置:安全
若是你的JDK安装在C盘里,如:C:\j2sdk1.4.2_05,那么就在系统变量里(固然也能够在用户变量里)点新建:
变量名:JAVA_HOME
变量值:C:\j2sdk1.4.2_05
再次点新建:
变量名:classpath
变量值:.;%JAVA_HOME%\lib\dt.jar;
并在path里加入 .;%JAVA_HOME%\bin;
测试:
启动:运行cmd
Dos命令下分别输入Java和JavaC后回车
(2) Tomcat环境变量配置:
若是你的Tomcat安装在C盘里,如:F:\Tomcat50(在这里切记一下,安装Tomcat时,在其字母周围
必定不要存在空格,不然最后可能致使配置不成功)
一样,在系统变量里点新建:
变量名:CATALINA_BASE
变量值:C:\apache-tomcat-6.0.18\apache-tomcat-6.0.18
再次新建:
变量名:CATALINA_HOME
变量值:C:\apache-tomcat-6.0.18\apache-tomcat-6.0.18
点击肯定后在classpath中加入%CATALINA_HOME%\common\lib\servlet-api.jar;
在path中加入%CATALINA_HOME%\lib;
测试:
进入%CATALINA_HOME%bin
运行startup.bat
背景:做为服务机与客户机通讯的协议
步骤:
3.1生成keystore
在命令行下使用以下命令:
C:\Documents and Settings\administrator>keytool -genkey -alias mykey -keyalg RSA -keystore server.keystore
输入keystore密码:123456
再次输入新密码:123456
您的名字与姓氏是什么?
[Unknown]: 主机名或者IP最好是作了host映射的主机名
您的组织单位名称是什么?
[Unknown]: capinfo
您的组织名称是什么?
[Unknown]: capinfo
您所在的城市或区域名称是什么?
[Unknown]: beijing
您所在的州或省份名称是什么?
[Unknown]: beijing
该单位的两字母国家代码是什么
[Unknown]: cn
CN=fengqingyu, OU=capinfo software ltd., O=capinfo, L=beijing, ST=beijing, C=cn 正确吗?
[否]: y
输入<mykey>的主密码
(若是和 keystore 密码相同,按回车):
在C:\Documents and Settings\new下能够找到一个文件:server.keystore,其中就包含了自签名的证书。
注意:
这里要求certificate keystore 和certificate的密码一致,此为Tomcat的约束。
3.2添加keystore目录
在%TOMCAT_HOME%目录下新建目录keystore,并拷贝server.keystore到其目录下。
3.3修改配置文件
修改%TOMCAT_HOME%/conf/server.xml文件。添加https的Connector。
<Connector
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="keystore/server.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
注意:
1)keystoreFile指向文件%TOMCAT_HOME%/keystore/server.keystore文件。
2)keystorePass就是刚才生成certificate keystore的密码。
3)测试Https。访问https://localhost:8443/,提示有不安全的证书,接受证书,看到可亲的tom猫
4)访问的时候localhost最好换成你的主机名。
至此SSL协议配置结束。
4.1 CAS在tomcat上的发布
1)将下载的cas-server-3.3.3-release.zip解压
2)将解压包内的modules文件夹下的cas-server-webapp-3.3.3.war 拷贝到 tomcat的webapps 目录,并改名为 cas.war
能够从新启动 tomcat,而后访问:https://localhost:8443/cas ,若是能出现正常的 CAS登陆页面,则说明 CAS Server 已经部署成功。
一、 配置客户端服务器的HTTPS协议方法同服务端。
二、 客户端的安装
1) 将cas-client-java-2.1.1.zip解压并将\cas-client-java-2.1.1\dist下的casclient.jar拷贝到你所要应用的项目的WEB-INF\lib目录下
2) 将\cas-client-java-2.1.1\lib下的全部包copy到WEB-INF\lib目录下
三、 密钥的交换。
1) 服务端密钥的导出
C:\Documents and Settings\administrator>keytool -export -file client.cert -alias mykey -keystore server.keystore
2) 客户端密钥的导入
将导出的client.cert密钥copy到客户端机器上在客户端机器上运行
keytool -import -trustcacerts -file client.cert -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -alias mykey1
注意:
导入的部位是
JAVA_HOME的jre目录下,不是跟jdk同级的jre目录
例如: C:/Program Files/Java/jdk1.6.0_03/jre/lib/security/cacerts
四、 配置文件的修改
1) 修改webapps\examples\WEB-INF\web.xml,加入servlet filter实现SSO检查。
注:该web.xml为你要加入SSO功能的项目下的web.xml文件,本示例为使用tomcat下自带的example项目
<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://cas02.com.cn:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://cas02.com.cn:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>cas02.com.cn:8080</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.wrapRequest</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意:本测试案例的服务端与客户端在同台机器下因此地址栏中全使用了同一主机名,如客户机与服务机在不一样机器上,则第一二两个表红色的主机名要换成服务机的主机名,第三个标蓝色的主机名为客户机的主机名。
1)经过IE访问http://主机名:8080后进入TOMCAT页面后选择example会跳转到CAS得登陆面输入相同的用户名密码进入example的登陆后页面,至此该简单的SSO结束
CAS Client 与受保护的客户端应用部署在一块儿,以 Filter 方式保护受保护的资源。对于访问受保护资源的每一个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,若是没有,则说明当前用户还没有登陆,因而将请求重定向到指定好的 CAS Server 登陆地址,并传递 Service (也就是要访问的目的资源地址),以便登陆成功事后转回该地址。用户在第 3 步中输入认证信息,若是登陆成功,CAS Server 随机产生一个至关长度、惟1、不可伪造的 Service Ticket,并缓存以待未来验证,以后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 事后,在第5,6 步中与 CAS Server 进行身份合适,以确保 Service Ticket 的合法性。
在该协议中,全部与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工做过程当中会有 2 次重定向的过程,可是 CAS Client 与 CAS Server 之间进行Ticket 验证的过程对于用户是透明的。
另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍能够参考 CAS 官方网站上的相关文档。