1 CAS 的基本原理
CAS(Central Authentication Service) 是 Yale 大学发起的一个开源项目,据统计,大概每 10 个采用开源构建 Web SSO 的 Java 项目,就有 8 个使用 CAS 。对这些统计,我虽然不以为然,但有一点可以肯定的是, CAS 是我认为最简单实效,而且足够安全的 SSO 选择。

CAS 基础模式

初学者可能会对上图的 PGT URL 感到迷惑,或者会问,为什么要这么麻烦,要通过一个额外的 URL( 而且是 SSL 的入口 ) 去传递 PGT ?如果直接在 Step 6 返回,则连用来做对应关系的 PGTIOU 都可以省掉。 PGTIOU 设计是从安全性考虑的,非常必要, CAS 协议安全性问题我会在后面一节介绍。

代理认证模式非常有用,它也是 CAS 协议 v2 的一个最大的变化,这种模式非常适合在复杂的业务领域中应用 SSO 。因为,以前我们实施 SSO 的时候,都是假定以 IE User 为 SSO 的访问者,忽视了业务系统作为 SSO 的访问者角色。
2 CAS安全性介绍
TGC/PGT 安全性
<context-param>
<param-name>edu.yale.its.tp.cas.grantingTimeout</param-name>
<param-value>7200</param-value>
</context-param>
|
<context-param>
<param-name>edu.yale.its.tp.cas.serviceTimeout</param-name>
<param-value>300</param-value>
</context-param>
|
3 Yale cas安装
一、配置Tomcat,启用SSL协议。
1.在CAS要安装的机器上(也就是服务端)为Tomcat生成用于SSL通讯的密钥:keytool -genkey -alias tomcat -keyalg RSA,输入密钥密码和相应参数,(注意:第一个参数CN一定要输入CAS安装机器名,其他参数就随便了),结果是在用户目录中创建了名为.keystore的密钥文件。
2.从服务端导出密钥文件:keytool -export -file server.crt -alias tomcat,输入上一步中的密码,结果在当前目录生成server.crt密钥文件。(注意:这个文件是要导入客户端的JVM上的)
3.为客户端的JVM导入密钥:keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file server.crt -alias tomcat,输入密码(注意:这里的密码不是上面设定的密码,而是changeit),将创建cacerts文件。
4.修改服务端的Tomcat配置文件server.xml,去掉对于SSL的注释,即开放8443端口,注意这里需要在connector字段中加入keystorePass="password"参数,password即为上面几步中涉及到的密码,keystoreFile=".keystorePath",.keystorePath即为在第一步中生成的文件.keystore的全路径,如/usr/java/bin/.keystore。
5.启动Tomcat,测试https://server:8443/是否是需经过验证方可访问(注意:server为服务端的IP地址或机器名)。
二、部署CAS Server 2.0.12到Tomcat
1.一种简单的方法是将下载包中的cas.war文件直接复制到Tomcat的webapps目录下。
2.另外一种方法,从sourceforge上找到ESUP-Portail CAS Generic Handler项目,利用esup-cas-quick-start生成一个最简的TOMCAT,详见我的下一篇文章。
3.启动Tomcat,测试https://server:8443/cas,是否可访问CAS主页面(注意:server为服务端的IP地址或机器名)。
三、部署CAS Client 2.0.11到Servlet-Examples
1.利用Servlet-Examples实例进行测试,将下载包中的casclient.jar文件复制到Servlet-Examples中WEB-INF目录的lib下,这里需要手工建立lib目录。
2.修改Servlet-Examples的配置文件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://server: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://serName:8443/cas/proxyValidate</param-value>
</init-param><!--这里的serName是服务端的主机名,而且必须是-->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>client:port</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port-->
</init-param>
</filter>
<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
四、测试
1.启动Tomcat,定位到Servlet-Examples应用,点击Execute;
2.浏览器跳转至CAS登录首页,注意在URL中已经附上了Servlet-Examples的Service名
3.输入用户名和密码,这里没有对其验证条件做修改,因此只要用户名和密码相同即可通过验证。
4.验证通过后浏览器又重新定位至Servlet-Examples并显示该Servlet的内容。
5.点击Http Header的Servlet应用,可以看到里面对当前用户的用户名信息做了记录。
6.以后访问Servlet-Examples应用都无需再次输入用户名和密码了。
至此,CAS Server和Client已经在Tomcat上成功部署与配置,并达到了预期的SSO效果。
4 yale cas 配置谈
在配置YALE 的CAS里面,走了不少弯路,到最后,终于搞好了.因此写了一个教程.希望再次配置的人能少走弯路.
TOMCAT :tomcat-5.5.15版~~~忘记了,反正是当前最新的版本
JDK:1.5.06
环境变量要设好.
第一次发帖~~~~
1. 启用TOMCAT的SSL
把.keystore文件复制到TOMCAT的CONF目录下面。
在TOMCAT的主目录的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="conf/.keystore"
keystorePass="changeit"
/>
其中的keystoreFile是证书库文件,keystorePass是访问此证书库文件的密码。
注:keystore文件可以用以下方法生成。
Keytool –genkey –alias hostname –keyalg RSA(在接下来的第一项是名称,记住最好是和hostname同一名称)执行此操作会在用户的当前目录(user.home)下产生一个名为.keystore的文件。如果已经有了,将自动把新产生的KEY放进文件里面(此次的hostname是运行CAS服务器的名字.不要搞错,否则会在以后验证出错的.如果你是在本地测试,则用localhost就OK了)
2. 导入证书文件到各个应用的JRE的JVM里面
首先产生一个证书文件,用以下方法:
Keytool –export –alias hostname –file filename.cer
这样就在用户当前产生了一个名为filename.cer的文件
接下来就把此文件导入到各应用的的JVM里面
Keytool –import –alias hostname –file filename –keystore {java_home}/jre/lib/security/cacerts
注:如果你的JAVA_HOME里面有空格,请用引号括住。
3. 把cas.war包复制到TOMCAT的WEBAPPS下面,然后用http://localhost:8080/cas/login就可以访问登陆了
改写验证方法。CAS的默认方验证方法是用户名和密码相同,如果想改为自己的验证方式,如何做呢?你只需复制以下代码,然后在适当的地方插入你的验证代码就OK了。
package org.jasig.cas.authentication.handler.support;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.springframework.util.StringUtils;
public final class classname extends
AbstractUsernamePasswordAuthenticationHandler {
public boolean authenticateUsernamePasswordInternal(
final UsernamePasswordCredentials credentials) {
final String username = credentials.getUsername();
final String password = credentials.getPassword();
if (在此插入你的验证代码) {
getLog().debug(
"User [" + username + "] was successfully authenticated.");
return true;
}
getLog().debug("User [" + username + "] failed authentication");
return false;
}
protected void afterPropertiesSetInternal() throws Exception {
super.afterPropertiesSetInternal();
getLog()
.warn(
this.getClass().getName()
+ " is only to be used in a testing environment. NEVER enable this in a production environment.");
}
}
然后,修改deployerConfigContext.xml(在CAS的WEB-INF目录下面)
找到
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
把class改为你自己写的验证的类就OK了。
到此,服务器端的配置就完成了。
接下来是各个应用的配置:
4.(以JAVA的配置为例子)把casclient.jar包复制到应用的lib目录下面,如果没有就创建它。然后再在应用的部署描述文件里面(web.xml)加上filter。如下:
<filter>
<filter-name>CAS Filter</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://casServerhost:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https:// casServerhost:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
Localhost是指各个应用的服务器的名字
casServerHost是指cas服务器的名字
其中的filter-mapping就是配置哪些资源是需要通过CAS验证的。可以配置多个。
4. 配置语言包
在cas里面的WEB-INF/classes下面添加不同的语言包,然后再在/WEB-INF/view/jsp/default/ui/includes的top.jsp文件顶部加入<%@ page contentType="text/html; charset=gbk" language="java" %>便可以了。
一些错误信息:
1. keytool 认证未输入别名 <mykey> 已经存在
这是因为你已经导入了一信任证书。在进行keytool –import的时候,如果没有指定别名,则系统默任导入的证书的名字为mykey,所以,可以先删除此证书keytool –delete –alias mykey –keystore {java_home}/jre/lib/security/cacerts
然后再从新导入,或者指定别名导入keytool –import –alias name –keystore {java_home}/jre/lib/security/cacerts
2. java.io.IOException: Keystore was tampered with, or password was incorrect
这个很可能你的keystore文件已经被修改了,密码已经更改,直接删除这个文件,再从新生成就可以了
3. javax.servlet.ServletException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
这是因为你没有在应用端导入证书。在应用端执行keytool –import –alias name –file filename.cer便可以。其中的name.cer是在前面的用keytool –export导出的cer文件
相关推荐
Yale CAS实现单点登陆的客户端源码和服务端源码,客户端cas-client-3.1.10代码和cas-server-3.4.2.1代码
Yale CAS作为SSO的一种实现,基于Java开发,易于集成,支持多种认证协议,如SAML、OAuth等。 #### 1.2 环境 在开始配置之前,确保你有一个运行Java的服务器环境,例如Tomcat,并且了解基本的Java和Web服务器管理...
1. `cas-client-core-3.1.8.jar`:这是CAS Java客户端的核心库,包含了处理CAS协议交互所需的类和方法。它负责与CAS服务器通信,执行验证请求,处理服务票证(Service Ticket),并管理用户的会话状态。 2. `cas...
《Yale CAS Server的部署及cas-java-client 3.2的应用》 CAS(Central Authentication Service,中央认证服务)是耶鲁大学开发的一个开源的身份验证框架,它为Web应用程序提供了单一登录(Single Sign-On,SSO)...
Weblogic 使用 YALE CAS 实现 SSO 单点登录的方法 一、Yale CAS 简介 Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。...
总的来说,"Yale CAS SSO DotNet Client"为.NET开发者提供了一个方便的工具,使他们能够轻松地在自己的应用中实现与Yale CAS服务器的SSO整合。通过理解和掌握这个客户端库的使用,开发者可以提升他们的应用安全性,...
在Tomcat服务器中集成Yale CAS以实现SSO,首先需要下载CAS服务器和客户端的发行包。这两个包可以从官方提供的链接获取,分别是cas-server-2.0.12.zip和cas-client-2.0.11.zip。解压缩CAS服务器的war文件(cas.war)...
Yale CAS(Central Authentication Service)是由耶鲁大学开发的一个开源项目,专门用于实现SSO功能。它是一个平台无关的解决方案,易于理解和部署,并且支持代理功能,这意味着它可以与各种不同的应用程序和服务...
在开始配置Yale CAS之前,确保你有以下基础环境: 1. **操作系统**:通常,CAS可以在各种Linux发行版或Windows服务器上运行。 2. **Java开发环境**:需要安装JDK,并确保`JAVA_HOME`环境变量设置正确,推荐使用Java ...
"CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...
### 基于Yale_CAS的单点登录的设计与实现 #### 一、引言 随着信息技术和网络技术的迅速发展,企业内部的Web应用系统越来越多,如财务系统、人事系统、客户关系管理系统(CRM)、采购系统等。这些系统的出现极大地...
CAS协议主要分为两个阶段:认证阶段(Authentication)和票证验证阶段(Ticket Validation)。 三、准备工作 在部署CAS Server前,需要完成以下准备工作: 1. 安装和配置Java环境,因为CAS Server是基于Java构建的...
源码分析对于理解CAS的工作原理至关重要,同时也意味着定制可能涉及修改核心代码或编写插件来实现自定义功能。"工具"可能指的是开发者在定制过程中使用到的各种辅助工具,如IDE、调试器、版本控制工具等。 【压缩...
CAS协议的基本流程如下:首先,CAS Client通过过滤器保护Web应用资源,检查HTTP请求中是否包含Service Ticket。若无Ticket,用户会被重定向到CAS Server进行认证。用户成功认证后,CAS Server生成随机的Service ...
总结,整合Yale CAS与Apache Shiro,能够让我们在享受CAS带来的SSO便利的同时,利用Shiro实现更精细的权限控制。通过理解CAS和Shiro的核心原理,以及正确配置和测试,可以构建出一个强大而安全的Web应用程序。在这个...
CAS协议经历了多个版本的迭代,从最初的简单形式到现在的CAS v3,其基础思想始终受到Kerberos票据概念的影响。在CAS v2及以后的版本中,XML被用于增强协议的可扩展性,而CAS v3引入了AOP(面向切面编程)技术,使得...
- **KDC(Key Distribution Center)**:在Kerberos协议中,KDC负责密钥的分发,但CAS中并不直接使用KDC概念,而是借鉴了其原理。 - **Service Ticket(ST)**:用户请求访问服务时,CAS服务器会根据TGC发放ST,...
解决普元EOS报错:edu.yale.its.tp.cas.client.IContextInit 下载后需jar到lib里面且单击右键在属性一栏的弹出框内添加该jar包即可解决爆粗
#### 一、SSO实现原理与CAS的作用 单点登录(Single Sign-On,简称SSO)是一种用户身份验证机制,允许用户在一个安全领域内访问多个应用系统,而无需多次输入身份验证信息。在税务行业信息化发展中,应用整合成为...