`
desert3
  • 浏览: 2158625 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

CAS_SSO单点登录实例详细步骤(转)、Tomcat ssl(https) 配置

 
阅读更多
0, 从CAS官网下载最新版本的CAS服务器:cas-server-3.5.1-release.zipjava版客户端cas-client-3.2.1-release.zip

1, 修改hosts文件,添加域名方便演示
127.0.0.1    cas.my.com #对应部署cas server的tomcat,这个虚拟域名还用于证书生成
127.0.0.1    app1.my.com # 对应部署app1 的tomcat
127.0.0.1    app2.my.com #对应部署app2 的tomcat

2, JDK安装, JAVA_HOME

3, 数字证书配置 - 生成数据证书文件(数据库)。所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。
keytool -genkey -alias casdemo -keyalg RSA -keysize 1024 -storepass P@ssw0rd -keypass P@ssw0rd -validity 365 -keystore E:\WorkRecords\CAS\casdemo.keystore

-storepass 指定私钥数据库keystore的密码(所有访问keystore文件的命令都要提供改密码)
-keypass 用来保护密钥对中的私钥。
-keypass 和 storepass 两个密码要一致,否则下面tomcat 配置https 访问会报错误(tomcat下配置文件对应的属性名叫keystorePass):java.io.IOException: Cannot recover key
可以使用下述命令修改keypass 和 storepass
keytool -alias casdemo -storepasswd -keystore E:\WorkRecords\CAS\casdemo.keystore -storepass sP@ssw0rd -new P@ssw0rd
keytool -alias casdemo -keypasswd -keystore E:\WorkRecords\CAS\casdemo.keystore -storepass P@ssw0rd -keypass kP@ssw0rd -new P@ssw0rd
紧跟着输入的证书名CN必须是服务器的域名:cas.my.com

4, 数字证书配置 - 从数据证书数据库中导出指定的数字证书文件,数字证书文件只包括主体信息和对应的公钥
keytool -export -alias casdemo -keystore E:\WorkRecords\CAS\casdemo.keystore -file E:\WorkRecords\CAS\casdemo.crt -storepass P@ssw0rd

5,客户端导入 - 在客户端导入数字证书(包含主体信息和对应的公钥)
keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file E:\WorkRecords\CAS\casdemo.crt

注意:cacerts是certified authority certificates的缩写,就是java存放证书的证书库。访问这个文件的默认密码是changeit,要把证书导入到这里时,系统会提示你输入该密码。可以通过下面的命令把cacerts的访问密码改成cP@ssw0rd
keytool -storepasswd -alias casdemo -keystore %JAVA_HOME%\jre\lib\security\cacerts -storepass changeit -new cP@ssw0rd

6,tomcat容器启用https访问
修改conf/server.xml配置文件,启用8443端口配置,并增加属性keystoreFile="E:\WorkRecords\CAS\casdemo.keystore" keystorePass="P@ssw0rd" URIEncoding="UTF-8"
然后重启tomcat
https://localhost:8443/cas-server-webapp-3.5.1/login

keystoreFile 就是创建的私钥证书的路径
keystorePass 就是创建的私钥证书的访问密码

7,部署CAS-Server相关的Tomcat,参考CAS-Server下载目录下的INSTALL.txt安装
把cas-server-3.5.1\modules\cas-server-webapp-3.5.1.war复制到tomcat webapps目录下,然后重启tomcat,用下面路径访问CAS服务器
https://localhost:8443/cas-server-webapp-3.5.1/login
默认的cas server的验证是只要用户名和密码一样就可以成功登录。(仅仅用于测试,生成环境需要根据实际情况修改)

8,部署CAS-Client相关的Tomcat:参考Configuring the Jasig CAS Client for Java in the web.xml
把cas-client-3.2.1/modules/cas-client-core-3.2.1.jar复制到你所发布的webapp的WEB-INF/lib下(测试时可以使用tomcat下的example做例子),在客户端web应用中修改WEB-INF/web.xml 在里面添加如下过滤器
	<!-- 用于单点退出 -->
	<listener>
		<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
	</listener>
	<filter>
		<filter-name>CAS Single Sign Out Filter</filter-name>
		<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
	</filter>
	<!-- 用于单点登录 -->
	<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://cas.my.com:8443/cas/login</param-value>
			<!--这里的server是服务端的IP-->
		</init-param>
		<init-param>
			<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
			<param-value>https://cas.my.com:8443/cas/proxyValidate</param-value>
			<!--这里的ServerName是服务端的主机名也就是CN-->
		</init-param>
		<init-param>
			<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
			<param-value>localhost:8080</param-value>
			<!--client:port就是需要cas需要拦截的地址和端口,一般就是这个tomcat所启动的ip和port-->
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>CAS Single Sign Out Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>CASFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 该过滤器负责实现HttpServletRequest请求的包裹,
		比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
	-->
	<filter>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<filter-class>
 	                org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
		比如AssertionHolder.getAssertion().getPrincipal().getName()。
	-->
	<filter>
		<filter-name>CAS Assertion Thread Local Filter</filter-name>
		<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>CAS Assertion Thread Local Filter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

借以tomcat默认自带的 webapps\examples 作为演示的简单web项目,访问url:http://localhost:8080/examples/servlets/
9, 获取登录用户的信息
	import java.io.*;
	import java.util.*;
	import java.util.Map.Entry;
	 
	import javax.servlet.*;
	import javax.servlet.http.*;
	 
	import org.jasig.cas.client.authentication.AttributePrincipal;
	import org.jasig.cas.client.util.AbstractCasFilter;
 	import org.jasig.cas.client.validation.Assertion;
 	 
 	/**
 	 * The simplest possible servlet.
 	 *
 	 * @author James Duncan Davidson
 	 */
 	 
 	public class HelloWorldExample extends HttpServlet {
 	 
 	    public void doGet(HttpServletRequest request, HttpServletResponse response)
 	            throws IOException, ServletException {
 	        ResourceBundle rb = ResourceBundle.getBundle("LocalStrings", request
 	                .getLocale());
 	        response.setContentType("text/html");
 	        PrintWriter out = response.getWriter();
 	 
 	        out.println("<html>");
 	        out.println("<head>");
 	 
 	        String title = rb.getString("helloworld.title");
 	 
 	        out.println("<title>" + title + "</title>");
 	        out.println("</head>");
 	        out.println("<body bgcolor=\"white\">");
 	 
 	        out.println("<a href=\"../helloworld.html\">");
 	        out.println("<img src=\"../images/code.gif\" height=24 "
 	                + "width=24 align=right border=0 alt=\"view code\"></a>");
 	        out.println("<a href=\"../index.html\">");
 	        out.println("<img src=\"../images/return.gif\" height=24 "
 	                + "width=24 align=right border=0 alt=\"return\"></a>");
 	        out.println("<h1>" + title + "</h1>");
 	 
 	        Assertion assertion = (Assertion) request.getSession().getAttribute(
 	                AbstractCasFilter.CONST_CAS_ASSERTION);
 	 
 	        if (null != assertion) {
 	            out.println(" Log | ValidFromDate =:"
 	                    + assertion.getValidFromDate() + "<br>");
 	            out.println(" Log | ValidUntilDate =:"
 	                    + assertion.getValidUntilDate() + "<br>");
 	            Map<Object, Object> attMap = assertion.getAttributes();
 	            out.println(" Log | getAttributes Map size = " + attMap.size()
 	                    + "<br>");
 	            for (Entry<Object, Object> entry : attMap.entrySet()) {
 	                out.println("     | " + entry.getKey() + "=:"
 	                        + entry.getValue() + "<br>");
 	            }
 	 
 	        }
 	        AttributePrincipal principal = assertion.getPrincipal();
 	 
 	        // AttributePrincipal principal = (AttributePrincipal) request
 	        // .getUserPrincipal();
 	 
 	        String username = null;
 	        out.print(" Log | UserName:");
 	        if (null != principal) {
 	            username = principal.getName();
 	            out.println("<span style='color:red;'>" + username + "</span><br>");
 	        }
 	 
 	        out.println("</body>");
 	        out.println("</html>");
 	    }


keytool报错误:keytool error: java.security.UnrecoverableKeyException: Cannot recover key
表明:命令中输入的keyPass不正确

参考:
CAS官网地址:http://www.jasig.org/cas
CAS帮助文档:https://wiki.jasig.org/display/CASUM/Home
keytool - Key and Certificate Management Tool: 管理私钥数据库(keystore)以及私钥关联的X.509证书链验证的对应公钥(证书),同时也为受信实体管理证书。
keytool工具的详细运用
CAS_SSO单点登录实例详细步骤
SSO之CAS单点登录实例演示
分享到:
评论
3 楼 duanbs0035 2015-07-23  
我也遇到了1楼的这个问题。请问博主这个问题怎么解决呢?我cas-server是4.0的  cas-calient是3.2.1的。
2 楼 ueu2715 2014-02-25  
这个版本的client里面没有edu.yale开头的包,那个好像是2.1.1版本里面有的。
1 楼 w420372197 2013-08-29  
ClassNotFoundException: edu.yale.its.tp.cas.client.filter.CASFilter 这个错误怎么解决?

相关推荐

    CAS单点登录实例详细步骤

    本文将详细解析“CAS单点登录实例详细步骤”这一主题,通过分析给定文件的标题、描述、标签以及部分内容,提炼出关于CAS SSO配置的关键知识点。 #### 二、CAS单点登录基础知识 CAS的核心功能在于提供一种安全的...

    tomcat配置ssl-单点登录(sso).rar

    标题中的“tomcat配置ssl-单点登录(sso)”指的是在Apache Tomcat服务器上配置SSL安全套接层,以及实现单点登录(Single Sign-On, SSO)功能。这是一个涉及网络安全和用户认证的重要主题,主要目标是提高Web应用的...

    SSO之CAS单点登录详细教程

    ### SSO之CAS单点登录详细教程 #### 一、简介 SSO(Single Sign-On)即单点登录,是一种用户认证机制,允许用户在多个应用程序和服务之间仅使用一次登录凭据进行身份验证。CAS(Central Authentication Service)是...

    使用CAS 在Tomcat 中实现单点登录实例教程,有例子和参考

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次认证即可访问多个相互信任的系统。在这个实例教程中,我们将重点讨论如何使用中央认证服务(Central ...

    Yelu 大学 cas 单点登录实例

    【Yelu大学CAS单点登录实例详解】 在IT行业中,单点登录(Single Sign-On,简称SSO)是一种网络认证机制,它允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。Yelu大学采用的是CAS(Central ...

    SSO 单点登录配置方案.docx

    SSO(Single Sign-On)单点登录是一种网络身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,无需多次输入凭证。这种技术在大型企业或组织中尤其有用,可以提高用户体验,同时减少密码管理的复杂性和...

    cas 单点登录 耶鲁大学单点登录

    本节将详细介绍如何配置一个基本的CAS单点登录环境,包括服务器端数字证书的生成与配置,以及Tomcat服务器的安全设置。 ##### 1. 配置服务器端的数字证书 在CAS环境中,数字证书对于确保通信安全至关重要。以下...

    CAS示例环境部署及配置

    CAS 是 Jasig 组织开发的一种基于 Web 的单点登录(Single Sign-On,SSO)协议的开源软件。它允许用户通过一次登录一个应用,就能访问其他所有集成 CAS 的应用,无需多次输入认证信息,提高了用户体验。 【CAS 示例...

    跨域SSO实例安装和配置指南

    本文档旨在为初次接触CAS(Central Authentication Service)系统的用户提供一个实际的操作指南,通过一个具体的跨域单点登录(Single Sign-On, SSO)示例来帮助读者快速理解和掌握CAS的工作原理及其在SSO场景中的...

    Acegi Security整合CAS实例

    通过上述详细步骤的介绍,开发者可以了解到如何从零开始配置SSL环境、整合CAS Server与Acegi Security,最终实现安全且高效的单点登录解决方案。这种整合方案在企业级应用中尤为常见,对于提高应用的安全性和便捷性...

    cas 系统实例 服务端配置(一)

    描述中提到的博客链接(https://01jiangwei01.iteye.com/blog/1434200)可能包含了更详细的配置步骤和解释,但由于信息有限,我们只能根据常规的 CAS 配置流程进行说明。 1. **环境准备**: 在开始配置之前,确保...

    Spring Security集成CAS客户端实例

    本实例旨在展示如何将Spring Security与CAS结合,实现一个高效的单点登录(Single Sign-On,SSO)解决方案。下面,我们将深入探讨这个集成过程。 首先,Spring Security是Spring框架的一部分,专门用于应用程序的...

    关于cas安装和配置

    - **单点登录**:当用户首次访问受保护的应用时,如果没有有效的 CAS 票据,会被重定向到 CAS Server 进行身份验证。验证成功后,CAS 会返回一个票据,客户端应用通过这个票据获取用户的认证信息。 - **单点登出**...

    windows下进行单点登录配置操作手册.docx

    本文档将详细介绍如何在Windows环境下通过SSL、CAS和LDAP来实现单点登录。 ##### 1.1 SSL (Secure Socket Layer) 安全套接层 SSL是一种用于确保数据传输安全性的协议,主要应用于浏览器与服务器之间的通信加密。它...

    windows下进行单点登录配置操作手册.pdf

    以上步骤完成了基本的单点登录配置流程。通过这种方式,可以实现在Windows环境下利用SSL+CAS+LDAP技术进行单点登录的功能。此外,为了提高安全性,还需要对CAS服务器进行相应的安全设置,如启用HTTPS、设置会话超时...

    cas demo, client源码

    CAS(Central Authentication Service)是基于Java的开源身份验证框架,主要用于实现Web应用的单点登录(Single Sign-On,简称SSO)。在这个“cas demo, client源码”中,我们主要探讨的是如何设置和理解CAS客户端在...

    cas4认证服务

    3. **单点登出**:除了单点登录,CAS还实现了单点登出功能,即用户在一个应用中登出时,将自动从所有已登录的应用中登出。 4. **可扩展性**:CAS的插件架构允许开发人员添加自定义认证模块,以适应特定的身份验证...

Global site tag (gtag.js) - Google Analytics