- 浏览: 2139535 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (401)
- Agile (16)
- Apache Commons (3)
- Architecture (8)
- DB.MongoDB (5)
- DB.Mysql (3)
- DB.Oracle (34)
- DirectoryService (1)
- DotNet (1)
- English (3)
- Groovy (0)
- Html (28)
- Java (67)
- Java.Aixs (7)
- Java.Cache (2)
- Java.jPBM (1)
- Java.Resin (6)
- Java.Spring (4)
- Java.Struts2 (5)
- Java.Tomcat (16)
- Javascript (45)
- Javascript.Google Map (2)
- Javascript.Jquery (8)
- Life (15)
- Maven&Ant (4)
- Network (5)
- OS.Linux (45)
- OS.Windows (10)
- OS.Windows.Office (1)
- PlayFramework (15)
- Python (28)
- Reading notes (11)
- Security (13)
- Server.Apache (3)
- Server.Nginx (7)
- Test (6)
- Tool (15)
- Work.Solution (15)
- Other (20)
- SSO&CAS&Identity (13)
最新评论
-
hutuxiansheng123:
防火墙、Iptables、netfilter/iptables、NAT 概述 -
dacoolbaby:
非常棒的正则表达式,非常适用。万分感谢。
用python分析nginx的access日志 -
loot00:
您好! 我也遇到了相同的错误信息。我是用f_link_lob ...
LOB variable no longer valid after subsequent fetch -
feihangchen:
@OnApplicationStop public clas ...
Play framework 1.2.3 Jobs定时任务、异步任务、引导任务、触发任务、关闭任务 -
洞渊龙王:
谢谢了
www.w3.org被qiang导致logback报错:Connect reset
0, 从CAS官网下载最新版本的CAS服务器:cas-server-3.5.1-release.zip和java版客户端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 在里面添加如下过滤器
借以tomcat默认自带的 webapps\examples 作为演示的简单web项目,访问url:http://localhost:8080/examples/servlets/
9, 获取登录用户的信息
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单点登录实例演示
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 这个错误怎么解决?
发表评论
-
SAML2.0协议 - 维基百科版翻译
2012-10-26 15:09 10495SAML 2.0 Specifications - http: ... -
SAML简介、Pingfederate
2012-10-25 17:03 3221SAML(Security Assertion Markup ... -
CAS - FAQ(Login ticket 、pgtIou、代理、虚拟证书、Smt、Https)
2012-10-24 16:11 2393为什么有Login ticket: 类 ... -
CAS 1.0、CAS2.0演示例子(转)
2012-10-23 15:23 6402CAS1.0 vs.CAS2.0: CAS1.0也称为基础模 ... -
CAS协议 - CAS URIs
2012-10-23 09:51 218732.CAS URIs: CAS是一个基于HTTP的协议,这就要 ... -
CAS协议 - Introduction、Conventions & Definitions、CAS Entities
2012-10-22 16:27 15241.Introduction:以下是 CAS1.0 ... -
OAuth 2
2012-10-22 10:25 1346OAuth_2.0 协议第11修订版 - 中文版 The OA ... -
OAuth、OAuth与OpenID区别和联系
2012-10-19 14:52 38615OAuth(开放授权)是一 ... -
Identity 2.0、OpenID
2012-10-19 13:35 3509Identity 2.0 的提法大约是 ... -
CAS(Central Authentication Service、中央认证服务)
2012-10-17 09:35 15026CAS(Central Authentication Se ... -
SSO(Single Sign On、单点登录)、跨域SSO
2012-10-16 14:55 4562SSO英文全称Single Sign On ... -
openDS & LDAP & openLDAP
2012-05-09 09:49 5736OpenDS是一个基于CDDL(Common Developm ... -
tomcat reload&autodeploy log4j static静态变量 空指针错误
2012-03-13 13:30 4321默认情况下,Tomcat在启动时会自动加载webapps目录下 ... -
本机、生产环境Tomcat乱码处理
2012-03-05 11:05 1953项目由很多模块构成,且每个人负责自己的模块,并且由于历史原因, ... -
UrlEncoder,UrlDecoder, 字符集对Encoder的影响
2012-03-02 16:21 4688字符集对Encoder的影响,其实就是字符在不同字符集下编码不 ... -
Tomcat源码分析--ServletRequest.getParameterValue分析,Request字符集&QueryStringEncoding
2012-02-23 14:28 3954总结: HTTP GET方式 无for ... -
Tomcat源码分析--HTTP,AJP请求内部处理流程
2012-02-23 11:21 6200HTTP 1.1 server.xml配置使用 ... -
Tomcat关于encoding编码的默认设置以及乱码产生的原因
2012-02-22 20:50 24169注意:乱码和request的具体实现类有关,现在已经查到的是R ... -
tomcat 静态资源处理类DefaultServlet&Apache静态资源服务
2012-02-14 09:16 2013DefaultServlet是tomcat中用来处理静态资源和 ... -
tomcat下jsp页面显示不完全调查&jsp servlet&默认Web.xml配置
2012-02-10 16:43 1903问题:系统访问tomcat页面*.jsp时,发现显示的结果页面 ...
相关推荐
CAS_SSO单点登录实例详细步骤.doc CAS_SSO单点登录实例详细步骤.doc
CAS_SSO单点登录实例详细步骤,CAS_,SSO,单点登录
CAS_SSO单点登录实例详细步骤,讲解的非常详细
为两个SP 上HelloWorld Servlet 配置CAS Client 过滤器.............................................. 7 六. 在IDP上下载和部署CAS 服务器.......................................................................
CAS单点登录,定制CAS单点登录,此文档详细介绍了如何定制CAS,实现单点登录
CAS实现sso单点登录原理,可以方便技术人员理解
单点登录的英文名称为Single Sign-On,简写为SSO,它是一个用户认证的过程,允许用户一次性进行认证之后,就访问系统中不同的应用;而不需要访问每个应用时,都重新输入密码。IBM对SSO有一个形象的解释“单点登录、...
SSO 单点登录(Single Sign On)的简称, SSO是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS_SSO 框架 官方PPT ....
压缩包中有详细的cas sso 的配置过程,同时提供所需的全部JAR包!
CAS SSO 单点登录记录 作者:刘仁奎 个人网址 程序喵:http://www.ibloger.net / http://www.chengxumiao.net 程序员购书导航指南:http://books.chengxumiao.net QQ:1056856191 GitHub地址:...
用CAS来进行单点登录,此文档详细描述了配置相关步骤。
CAS实现单点登录(SSO)经典完整教程,详细描述了单点登录的有关内容。PS:有些错误的地方。
单点登陆的例子,说明文档,源码,jar包都有
简单实用的sso】的单点登录的实例 简单易懂 方便快捷 欢迎分享使用
Yale cas 实现sso教程,包括了java实现和dotnet实现。http://214s.5d6d.com
跨平台跨服务器跨网站SSO(单点登录)的方案
这个文档是经过我将近两个星期的研究,证实了其中文档的真实性和可用性,只要你跟着文档里面的步骤配置和实施,绝对实现cas单点登录(sso),包括跨域访问cas
因为公司要实现SSO单点登录的效果,最近在网上找了一些资料,但是都没有好用的, 所以自己用PHP 使用TP5.0 实现了SSO单点登录,可以跨多个域名。 下载后在本地配置好 A,B,C 3个网站,就可以模拟效果了。