目的:使用单点登录系统统一管理各子系统的用户登录登出,并提供一个统一的集成页面,方便用户在各系统之间的快速切换。
环境:cas-server-3.3.1,cas-client-2.0.11
一:配置服务器端的数字证书
1,生成数字证书
./keytool -genkey -alias examplecas -keypass changeit -keyalg RSA -keystore server.keystore
2,导出数字证书
./keytool -export -alias examplecas -keypass changeit -file server.crt -keystore server.keystore
3,将数字证书导入jre的可信区
./keytool -import -alias examplecas -file server.crt -keypass changeit -keystore ../jre/lib/security/cacerts
其他的一些命令:
查看可信证书列表(检查证书是否加入成功)
./keytool -list -keystore ../jre/lib/security/cacerts
常用命令:
-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg 指定密钥的算法
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-dname 指定证书拥有者信息例如: "CN=firstName,OU=org,O=bj,L=bj,ST=gd,C=cn"
-list 显示密钥库中的证书信息 keytool -list -v -keystore 别名 -storepass ....
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias 别名 -file 文件名.crt
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias 别名 -keystore sage
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 别名 -keypass .... -new .... -storepass ... -keystore 别名
-import 将已签名数字证书导入密钥库 keytool -import -alias 别名 -keystore 证书名-file 文件名(可以加.crt 后缀)
注意:
1,生成数字证书的时候必须使用主机名或者域名作为证书名称(CN),
例如sso.example.com(CN=sso.example.com, OU=example, O=example, L=beijing, ST=beijing, C=china)
2,检查JAVA_HOME环境变量(echo $JAVA_HOME),确认tomcat使用了那一个jre(有时候一台机器上会有
多个jre),需要将生成的证书文件导入至web服务器使用的那个jre的信任证书列表中,可以使用keytool -list
命令检查证书是否导入成功。
二:配置服务器端tomcat 6.0(server.xml)
打开被注释掉的https配置区,添加keystoreFile,keystorePass,truststoreFile属性配置。
Xml代码
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/java/default/bin/server.keystore"
keystorePass="changeit"
truststoreFile="/usr/java/default/jre/lib/security/cacerts"
/>
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/java/default/bin/server.keystore"
keystorePass="changeit"
truststoreFile="/usr/java/default/jre/lib/security/cacerts"
/>
如果需要则为cas server配置虚拟主机
Xml代码
<Host name="sso.example.com" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="sso.example.com" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
将cas-server-3.3.1-release\cas-server-3.3.1\modules\cas-server-webapp-3.3.1.war解压并
放至 webapps/cas3目录后,可通过https://sso.example.com:8443/cas3/login 访问cas server登录页面。
三:配置一个最简单的cas server端。
1,新建数据表
Sql代码
create table users
(
id int not null auto_increment,
username varchar(50) not null,
password varchar(50) not null,
primary key (id)
);
create table users
(
id int not null auto_increment,
username varchar(50) not null,
password varchar(50) not null,
primary key (id)
);
user表中添加需要认证的用户数据。
2,在 WebRoot/WEB-INF/spring-configuration/文件夹下新建一个spring的配置文件,配置dataSource对象
3,修改WebRoot/WEB-INF/deployerConfigContext.xml配置文件,将:
Xml代码
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
替换为:
Xml代码
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from users where username=?" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from users where username=?" />
<property name="dataSource" ref="dataSource" />
</bean>
四:配置客户端服务器。
客户端的服务器同样需要导入服务器端生成的数字证书,否则在cas server回调客户端页面的时候将会抛出以下异常:
Java代码
javax.servlet.ServletException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:254)
edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)
javax.servlet.ServletException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:254)
edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)
提示找不到有效的证书路径。
配置步骤:
1,拷贝服务器端生成的server.crt文件至客户端jre/bin目录下
2,执行:
C:\Program Files\Java\jre1.6.0_06\bin>keytool -import -alias examplecas -file server.crt -keypass changeit -keystore ..\lib\security\cacerts
3,查看是否添加成功
C:\Program Files\Java\jre1.6.0_06\bin>keytool -list -keystore ..\lib\security\cacerts
五:修改客户端增加单点登录支持。
1,修改web.xml文件:
Xml代码
<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://sso.example.com:8443/cas3/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://sso.example.com:8443/cas3/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>sso.example.com</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/portal/portal.jsp</url-pattern>
</filter-mapping>
<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://sso.example.com:8443/cas3/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://sso.example.com:8443/cas3/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>sso.example.com</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/portal/portal.jsp</url-pattern>
</filter-mapping>
2,增加子系统的登录接口,支持集成页面(portal.jsp)的访问请求。
例如,老系统的登录页面和主页面分别是login.jsp,main.jsp(login.jsp负责验证用户是否合法,合法则将用户
数据存入该系统的session对象当中,main.jsp负责分配用户在该系统内的访问权限及页面的初始化),为了不影
响老系统的正常访问,尽可能保证独立性可以实现两个仅供portal.jsp调用的类似页面(cas-login.jsp,cas-main.jsp).
cas-login.jsp中可以获得cas server传递给我们的用户名称。
Java代码
String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);
String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);
根据获得的用户名称再去本地数据库查找用户信息,完成验证及角色权限初始化的工作。
六:总结一下:
1,单点登录仅仅帮助我们在各个子系统中间安全的共享了一下用户名,省去了用户重复登陆的麻烦,统一了用户
帐户的管理,至于用户在每个系统中的权限分配,还是继续交给子系统完成吧。可以开发一个cas server端的
集成界面(portal),方便用户在各个子系统中间的快速切换。
2,为了完善cas server的用户管理功能,需要在cas 的server,client端各自开放几个调用接口,保证子系统与
cas server端的账户信息同步。
3,改造老系统时尽量为portal的集成开发新的访问入口(而不是去修改以前的代码使之兼容),这样既可以从集
成portal访问,又可以从原有的访问地址访问。
4,配置server端及client的服务器时候一定要找对tomcat究竟在使用那一个jre,windows上查看
%JAVA_HOME%变量,linux上echo $JAVA_HOME.
5,server端及client端的服务器均需要导入数字证书,否则cas server端回调客户端页面时将会抛出:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
异常。
分享到:
相关推荐
01 H3C CAS 云迁移方案最佳实践 02 H3C CAS-云容器引擎配置指导 03 H3C CAS 虚拟机快照配置指导 04 H3C CAS-虚拟机防病毒配置指导 05 H3C CAS SR-IOV配置指导 06 H3C CAS vGPU热迁移配置指导 07 H3C CAS 内存...
【标题】"CAS4.0 Server的Eclipse项目"是一个基于Java开发的身份验证服务系统,专为Web应用程序提供单点登录(Single Sign-On, SSO)...通过深入学习和实践,你可以利用这个项目创建安全、高效的Web应用身份验证系统。
总结,这个压缩包提供了集成CAS单点登录到Maven项目所需的全部资源,包括服务端war包和客户端DEMO,是学习和实践SSO技术的好材料。通过深入理解和操作这些内容,你可以更好地掌握CAS的工作原理以及如何在实际项目中...
在IT行业中,前后端分离是一种常见的开发模式,它将应用程序的前端和后端逻辑分离开来,以提高开发效率和可...通过学习和实践这样的项目,开发者可以加深对前后端分离、安全框架和SSO原理的理解,提高综合开发能力。
【描述】"本项目旨在帮助开发者在CAS项目中集成并修改登录页面。用户可以直接将压缩包中的项目文件解压后导入Eclipse这样的开发环境中进行编辑和运行。值得注意的是,描述中提到脚本仍使用CAS原有的,这意味着项目...
CAS(Central Authentication Service)是Java开发的一个开源的单点登录...通过学习和实践,你可以掌握CAS的核心概念,实现自定义认证策略,以及优化客户端集成,从而为你的项目构建一个强大而安全的单点登录系统。
总结起来,这个"单点登录cas服务器demo及springboot客户端demo"项目提供了一个实践单点登录概念的实例,涵盖了CAS服务器的搭建、Spring Boot应用的CAS客户端集成,以及Shiro或Pac4j的使用。对于想要学习和理解SSO...
CAS(Central ...通过以上介绍,你可以理解如何在项目中集成和配置CAS客户端,实现与CAS服务器的交互,从而为你的应用提供安全的单点登录功能。确保在实际操作中,结合具体的技术栈和项目需求进行适当的调整。
这个项目不仅展示了SSO的实现,还涵盖了现代Web应用中的许多安全和架构设计实践,对于学习和理解分布式系统中的身份验证和授权机制非常有帮助。通过深入理解每个组件的工作原理和它们之间的协作,开发者可以更好地...
CAS(Central Authentication Service)客户端是一种身份验证框架,用于实现单点登录...通过实践和调试这个示例项目,你可以深入理解CAS客户端的工作原理,并能将其应用于自己的项目中,提升用户认证的安全性和便利性。
Struts2和CAS单点登录(SSO)的集成是一个常见的Web应用安全实践,它允许用户在一个系统登录后,无须再次输入凭证就能访问其他相互信任的系统。在这个例子中,我们将深入探讨如何在MyEclipse环境下使用Struts2框架与...
【描述】中的"cas的例子,经过改造后,可以运行调试"意味着这是一个实际的CAS项目实例,可能包含了服务器端和客户端的配置,开发者已经调整了代码以适应特定的环境或者功能需求,并且可以用于学习和测试目的。...
7. **测试与部署**:完成修改后,使用Maven或Gradle构建项目,并将新版本的CAS服务器部署到生产环境。记得在部署前做好充分的测试,确保所有功能正常运行。 8. **日志配置**:为了调试和跟踪登录过程中的问题,可以...
将此文件添加到项目lib文件夹下,意味着项目可以访问并使用CAS客户端的功能。 3. **配置XML**: 配置CAS客户端通常涉及修改项目的Spring配置文件,如`applicationContext.xml`或`servlet-context.xml`。你需要配置...
本项目是关于如何将CAS(Central Authentication Service)与SpringMVC和Shiro结合实现SSO的实践示例。 首先,我们来了解一下三个主要组件: 1. **CAS**: CAS是一个开源的身份验证框架,主要用于处理用户身份验证...
本项目基于SpringBoot、CAS5.x、Shiro和Pac4j实现了SSO集成,下面将详细阐述这些技术组件以及它们在SSO中的作用。 1. **SpringBoot** SpringBoot是Spring框架的一个子项目,它简化了Spring应用的初始搭建和运行...
CAS(Central Authentication Service)是...综上所述,这个“cas.rar”压缩包是学习和实践CAS单点登录服务端开发的宝贵资源,通过研究其中的代码,开发者可以掌握CAS的工作原理,进而实现和定制自己的SSO解决方案。
在本文中,我们将深入探讨CAS单点登录的基本原理、工作流程以及如何通过提供的Demo进行实践操作。 **CAS基本原理** CAS的核心思想是用户只需在一个应用系统中验证身份,之后访问其他所有支持CAS的应用系统时都不再...
单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。CAS(Central ...对于希望深入理解SSO和CAS的开发者来说,这是一个极好的实践资源。
2. **在myeclipse中创建或导入CAS客户端项目**:你可以选择使用CAS的Java API或者开源库(如Spring Security CAS)来实现客户端。设置项目的Maven依赖,引入必要的CAS库。 3. **配置CAS客户端**:在项目的配置文件...