1. generate keystore

command : keytool -genkey -alias testtomcat -keyalg RSA -keystore "C:\Users\rocky\testsso\testtomcat.keystore"

password : 123456

2. setting the tomcat server.xml

3. download and extract cas-server-4.0.0-release.zip

~you can find cas-server-webapp-4.0.0.war in the modules package.

~copy it to tomcat webapps package and rename to cas.war.

~execute the  startup.bat command as the administrator user.

   ~https://localhost:8443/cas

~login with user( username : casuser; password : Mellon)

-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------

update 2016-04-06

1. java jdk不支持以ip建立证书,所以需要虚拟一个域名,如cas.server.com

2. 生成证书

keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36500 -alias cas.server.com -keystore C:/Users/rocky/testsso/tomcat.keystore -dname "CN=cas.server.com,OU=cdv,O=cdv,L=bj,ST=bj,C=CN"

3. 导出证书

keytool -exportcert -alias cas.server.com -keystore C:/Users/rocky/testsso/tomcat.keystore  -file C:/Users/rocky/testsso/tomcat.cer -rfc

4. tomcat 配置 cas, 浏览器添加证书

(区别于上面绝对路径方式引用, 现采用相对路径方式)将生成的tomcat.keystore 拷贝到tomcat目录下。

将第三步导出的tomcat.crt 导入到浏览器

5.  将tomcat.crt拷贝到cas client所在的机器, 并导入到jdk中(C:\Program Files\Java\jdk1.7.0_15\jre\lib\security\cacerts可以删除,这时导入的文件会重新生成该文件, C:\Program Files\Java\jre7\lib\security该路径下也有cacerts文件,可一并覆盖)

keytool -import -alias cacerts -keystore cacerts -file C:/Users/rocky/testsso/tomcat.cer -trustcacerts

6.创建cas client工程(web工程)casclient,配置xml文件,并导入相关jar包

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>ssoclient</display-name>
  4.  
  5. <filter>
  6. <filter-name>CAS Single Sign Out Filter</filter-name>
  7. <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>CAS Single Sign Out Filter</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>
  13.  
  14. <listener>
  15. <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
  16. </listener>
  17.  
  18. <filter>
  19. <filter-name>CAS Authentication Filter</filter-name>
  20. <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
  21. <init-param>
  22. <param-name>casServerLoginUrl</param-name>
  23. <param-value>https://cas.server.com:8443/cas/login</param-value>
  24. </init-param>
  25. <init-param>
  26. <param-name>serverName</param-name>
  27. <param-value>cas.server.com:8081</param-value>
  28. </init-param>
  29. </filter>
  30. <filter>
  31. <filter-name>CAS Validation Filter</filter-name>
  32. <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  33. <init-param>
  34. <param-name>casServerUrlPrefix</param-name>
  35. <param-value>https://cas.server.com:8443/cas/</param-value>
  36. </init-param>
  37. <init-param>
  38. <param-name>serverName</param-name>
  39. <param-value>cas.server.com:8081</param-value>
  40. </init-param>
  41. <init-param>
  42. <param-name>redirectAfterValidation</param-name>
  43. <param-value>false</param-value>
  44. </init-param>
  45. </filter>
  46. <filter>
  47. <filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
  48. <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
  49. </filter>
  50. <filter>
  51. <filter-name>CAS Assertion Thread Local Filter</filter-name>
  52. <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
  53. </filter>
  54. <filter-mapping>
  55. <filter-name>CAS Authentication Filter</filter-name>
  56. <url-pattern>/*</url-pattern>
  57. </filter-mapping>
  58.  
  59. <filter-mapping>
  60. <filter-name>CAS Validation Filter</filter-name>
  61. <url-pattern>/*</url-pattern>
  62. </filter-mapping>
  63.  
  64. <filter-mapping>
  65. <filter-name>CAS HttpServletRequest WrapperFilter</filter-name>
  66. <url-pattern>/*</url-pattern>
  67. </filter-mapping>
  68. <filter-mapping>
  69. <filter-name>CAS Assertion Thread Local Filter</filter-name>
  70. <url-pattern>/*</url-pattern>
  71. </filter-mapping>
  72. <welcome-file-list>
  73. <welcome-file>index.html</welcome-file>
  74. <welcome-file>index.htm</welcome-file>
  75. <welcome-file>index.jsp</welcome-file>
  76. <welcome-file>default.html</welcome-file>
  77. <welcome-file>default.htm</welcome-file>
  78. <welcome-file>default.jsp</welcome-file>
  79. </welcome-file-list>
  80. </web-app>

记得,在tomcat的server.xml中要修改相关port,如果在同一台机器上实验,开多个tomcat,也应修改相关port,防止port冲突。

7.  浏览器输入http://cas.server.com:8081/ssoclient/index.jsp, 可以看到地址栏变了,进入cas server的login页面,输出对的username 和 password, 会跳回到client的index.jsp页面。

http://cas.server.com:8082/ssoclient2/index.jsp  ,不在需要cas server登录, 直接看到index.jsp页面

update  2016-10-13 14:41

1.演示环境

windows7 64 主机名:rocky-PC

JDK : jdk1.7.0_80

tomcat : tomcat-7.0.70

cas-server-4.0.0

cas-client-3.3.3

windows hosts 文件 添加域名映射  (C:\Windows\System32\drivers\etc)

demo.cdv.com 对应部署的tomcat-cas, 这个名称在生成证书时用到

app1.cdv.com 对应部署的tomcat-app1,

app2.cdv.com 对应部署的tomcat-app2

2. 安全证书配置

2.1 证书生成

输入的名称和hosts文件一致,也可以用主机名;

keypass 和 storepass 一致,否则tomcat访问https失败

2.2 导出证书

2.3 客户端 导入证书

此处导入的密码和上面的不一样,如果客户端在多台机器上,需要多次导入

3. cas server部署

3.1 修改 tomcat-cas server.xml

3.2 启动 tomcat-cas, 访问https://demo.cdv.com:8443 并添加 浏览器 访问例外

3.3 从cas-server-4.0.0-> modules下拷贝cas-server-webapp.war到tomcat-cas webapp下 并重命名cas.war

启动tomcat-cas 访问https://demo.cdv.com:8443/cas/login

用户名 casuser 密码 Mellon登录

看到 Log in successful则cas server部署成功

4. cas client部署

4.1 tomcat-app1

4.1.1修改server.xml

  1. ..
  2. <Server port="" shutdown="SHUTDOWN">
  3. ..
  4.  
  5. <Connector port="" protocol="HTTP/1.1"
  6. connectionTimeout=""
  7. redirectPort="" />

访问http://app1.cdv.com:18080/examples/servlets/测试端口是否可用

4.1.2  导入jar

4.1.3  修改web.xml

  1. <!-- ======================== 单点登录开始 ======================== -->
  2. <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
  3. <listener>
  4. <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
  5. </listener>
  6.  
  7. <!-- 该过滤器用于实现单点登出功能,可选配置。 -->
  8. <filter>
  9. <filter-name>CAS Single Sign Out Filter</filter-name>
  10. <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>CAS Single Sign Out Filter</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16.  
  17. <filter>
  18. <filter-name>CAS Filter</filter-name>
  19. <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
  20. <init-param>
  21. <param-name>casServerLoginUrl</param-name>
  22. <param-value>https://demo.cdv.com:8443/cas/login</param-value>
  23. </init-param>
  24. <init-param>
  25. <param-name>serverName</param-name>
  26. <param-value>http://app1.cdv.com:18080</param-value>
  27. </init-param>
  28. </filter>
  29. <filter-mapping>
  30. <filter-name>CAS Filter</filter-name>
  31. <url-pattern>/*</url-pattern>
  32. </filter-mapping>
  33. <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
  34. <filter>
  35. <filter-name>CAS Validation Filter</filter-name>
  36. <filter-class>
  37. org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  38. <init-param>
  39. <param-name>casServerUrlPrefix</param-name>
  40. <param-value>https://demo.cdv.com:8443/cas</param-value>
  41. </init-param>
  42. <init-param>
  43. <param-name>serverName</param-name>
  44. <param-value>http://app1.cdv.com:18080</param-value>
  45. </init-param>
  46. </filter>
  47. <filter-mapping>
  48. <filter-name>CAS Validation Filter</filter-name>
  49. <url-pattern>/*</url-pattern>
  50. </filter-mapping>
  51.  
  52. <!--
  53. 该过滤器负责实现HttpServletRequest请求的包裹,
  54. 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
  55. -->
  56. <filter>
  57. <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  58. <filter-class>
  59. org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
  60. </filter>
  61. <filter-mapping>
  62. <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  63. <url-pattern>/*</url-pattern>
  64. </filter-mapping>
  65.  
  66. <!--
  67. 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
  68. 比如AssertionHolder.getAssertion().getPrincipal().getName()。
  69. -->
  70. <filter>
  71. <filter-name>CAS Assertion Thread Local Filter</filter-name>
  72. <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
  73. </filter>
  74. <filter-mapping>
  75. <filter-name>CAS Assertion Thread Local Filter</filter-name>
  76. <url-pattern>/*</url-pattern>
  77. </filter-mapping>
  78.  
  79. <!-- ======================== 单点登录结束 ======================== -->

4.2 tomcat-app2(同tomcat-app1)

4.2.1 修改server.xml

  1. ..
  2. <Server port="" shutdown="SHUTDOWN">
  3. ..
  4. <Connector port="" protocol="HTTP/1.1"
  5. connectionTimeout=""
  6. redirectPort="" />
  7. ..

4.2.2 导入jar

4.2.3  修改web.xml

  1. <!-- ======================== 单点登录开始 ======================== -->
  2. <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->
  3. <listener>
  4. <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
  5. </listener>
  6.  
  7. <!-- 该过滤器用于实现单点登出功能,可选配置。 -->
  8. <filter>
  9. <filter-name>CAS Single Sign Out Filter</filter-name>
  10. <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>CAS Single Sign Out Filter</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16.  
  17. <filter>
  18. <filter-name>CAS Filter</filter-name>
  19. <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
  20. <init-param>
  21. <param-name>casServerLoginUrl</param-name>
  22. <param-value>https://demo.cdv.com:8443/cas/login</param-value>
  23. </init-param>
  24. <init-param>
  25. <param-name>serverName</param-name>
  26. <param-value>http://app2.cdv.com:28080</param-value>
  27. </init-param>
  28. </filter>
  29. <filter-mapping>
  30. <filter-name>CAS Filter</filter-name>
  31. <url-pattern>/*</url-pattern>
  32. </filter-mapping>
  33. <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->
  34. <filter>
  35. <filter-name>CAS Validation Filter</filter-name>
  36. <filter-class>
  37. org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  38. <init-param>
  39. <param-name>casServerUrlPrefix</param-name>
  40. <param-value>https://demo.cdv.com:8443/cas</param-value>
  41. </init-param>
  42. <init-param>
  43. <param-name>serverName</param-name>
  44. <param-value>http://app2.cdv.com:28080</param-value>
  45. </init-param>
  46. </filter>
  47. <filter-mapping>
  48. <filter-name>CAS Validation Filter</filter-name>
  49. <url-pattern>/*</url-pattern>
  50. </filter-mapping>
  51.  
  52. <!--
  53. 该过滤器负责实现HttpServletRequest请求的包裹,
  54. 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。
  55. -->
  56. <filter>
  57. <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  58. <filter-class>
  59. org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
  60. </filter>
  61. <filter-mapping>
  62. <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
  63. <url-pattern>/*</url-pattern>
  64. </filter-mapping>
  65.  
  66. <!--
  67. 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。
  68. 比如AssertionHolder.getAssertion().getPrincipal().getName()。
  69. -->
  70. <filter>
  71. <filter-name>CAS Assertion Thread Local Filter</filter-name>
  72. <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
  73. </filter>
  74. <filter-mapping>
  75. <filter-name>CAS Assertion Thread Local Filter</filter-name>
  76. <url-pattern>/*</url-pattern>
  77. </filter-mapping>
  78.  
  79. <!-- ======================== 单点登录结束 ======================== -->

5. 测试

5.1 启动 tomcat-cas , tomcat-app1, tomcat-app2

5.2 访问 http://app1.cdv.com:18080/examples/servlets/servlet/HelloWorldExample

跳转到 cas-server登录界面, 输入用户名+密码 正确, 跳转到helloworld页面;

访问 http://app2.cdv.com:28080/examples/servlets/servlet/HelloWorldExample就不要登录了。

访问https://demo.cdv.com:8443/cas/logout可以注销登录

sso demo ( cas )的更多相关文章

  1. SSO之CAS单点登录实例演示

    本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...

  2. SSO之CAS单点登录详细搭建教程

    本教程是我个人编写,花费几个小时的时间,给需要学习的人员学习使用,希望能帮助到你们. [环境说明]:本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下: windows7 ...

  3. SSO之CAS + LDAP

    本来主要详细是介绍CAS和LDAP整合实现单点登录的步骤. 1. 依<SSO之安装CAS Server>所述安装好CAS Server.2. 安装ApacheDS.安装好ApacheDS后 ...

  4. sso demo mysql ( cas )

    基本配置 参考之前得随笔  http://www.cnblogs.com/rocky-fang/p/5354947.html 1. tomcat-cas 修改配置 1.1 在D:\test\sso\t ...

  5. sso demo 取消https (cas)

    基本配置 参考之前得随笔  http://www.cnblogs.com/rocky-fang/p/5354947.html 1. 修改tomcat-cas 配置 1.1 在 D:\test\sso\ ...

  6. SSO 基于CAS实现单点登录 实例解析(二)

    本文目录: 概述 演示环境 部署CAS-Server相关的Tomcat 部署CAS-Client相关的Tomcat 测试验证SSO 第一: 本demo在一个机器上实现(三个虚拟主机),来看SSO单点登 ...

  7. SSO之CAS基础及应用视频教程(1)

    CAS介绍     CAS = Central Authentication Service,中央认证服务.CAS 是 Yale 大学发起的一个开源项目,能够为 Web 应用系统或者非Web应用系统提 ...

  8. SSO之CAS总结

    1.采用kerberos原理 2.特点,经纪人模式即需要sso的所有用户账号要集中在一起 3.安全性保证方法: 关键就是保证TS和TGC的安全. 3.1)TS生成是采用足够随机算法,一次性使用,设置有 ...

  9. 单点登录系统(SSO)之CAS(中央认证服务)

    SSO(Single Sign On)单点登录系统,是在多个系统中值要求只要登录一次,就可以用已登录的身份访问多个系统,去掉了每次访问不同的系统都要重新登录的弊端. CAS(中央/集中认证服务):Th ...

随机推荐

  1. RedRabbit——基于BrokerPattern服务器框架

    RedRabbit 经典网游服务器架构 该图省略了专门用途的dbserver.guildserver等用于专门功能的server,该架构的优点有: l LoginGate相当于DNS,可以动态的保证G ...

  2. 哈希表用于Key与Value的对应

    一个类的某个属性要实现Key与Value的对应,以便通过访问名称就可以知道对应值,而不是通过索引号,最简单的方法直接用 哈希表using System.Collections;class Class1 ...

  3. [论文笔记] 一种Java遗留系统服务化切分和封装方法 (计算机学报, 2009)

    李翔,怀进鹏,曾晋,高鹏. 一种Java遗留系统服务化切分和封装方法. 计算机学报, 32(9), 2009, p1084-1815 (gs:5) 1. 本文研究从Java遗留系统中切分并封装出Web ...

  4. Unity不同平台生成中预处理的注意点

    http://blog.csdn.net/pandawuwyj/article/details/7959335 Unity3D的项目,这周吃亏在宏上了.大背景是项目需要在Unity中用Hudson自动 ...

  5. div 等高

    padding-bottom: 5000px; margin-bottom: -5000px;

  6. 导出excel和PDF小结 vba

    最近接触了一个关于Access工具的项目,所以整理下需要使用的方法. 功能要求简介: 1.将数据表中的数据导出到excel和PDF 2.并根据某个字段名称分sheet输出. 3.无模板方式 方案简介: ...

  7. Simplified CommonJS wrapper 与 AMD 标准定义模块差异

    标准的 AMD 模块定义 一个标准的 AMD 模块看起来是这样子: define(['foo', 'foo/bar'], function (foo, bar) { return { doSometh ...

  8. 固态硬盘寿命实测让你直观SSD寿命!--转

    近年来,高端笔记本及系列上网本越来越多的采用固态硬盘来提升整机性能,尽管众所周知固态硬盘除 了在正常的使用中带来更快速度的体验外,还具有零噪音.不怕震动.低功耗等优点,但大家对固态硬盘的寿命问题的担忧 ...

  9. 使用MyXls,出现访问被拒绝情况

    MyXls 作为一款比较好用的 操作Excel 的开源项目. 最近日常偶然发现报权限的问题,导出xls失败,处理方式以下: 如报上图所示错误,则需要在web.config中 <system.we ...

  10. Hadoop第11周练习—HBase基础知识

    1 :数据即日志 内容 2 :HBase合并过程 内容 3 :HBase一致性 内容 书面作业1:数据即日志 内容 我们常说HBase是“数据即日志”的数据库,它是怎样修改和删除数据的?和Oracle ...