`
阅读更多
keystool生成,导入:
keytool -genkey -alias tomcat -keyalg RSA
keytool -export -alias tomcat -file server.crt
keytool -import -file server.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts


CAS配置详解
From OseWiki
Jump to: navigation, search
1.下载cas-server和cas-client(可选,建议使用)

http://www.ja-sig.org/downloads/cas/cas-server-3.0.zip
http://www.yale.edu/tp/cas/cas-client-2.0.11.zip

2.将cas-server-3.0.zip解压,并将lib/cas.war拷贝到server1的webapps下

3.产生SERVER的证书

keytool -genkey -alias my-alias-name -keyalg RSA -keystore  keystore.keystore 首先在命令行中切换到 %java_home%\jre\lib\security目录 %java_home%\bin\keytool -genkey -alias tomcat -keyalg RSA 密码是:changeit 姓名是:localhost 其他随便写的 之后是 %java_home%\bin\keytool -export -alias tomcat -file server.crt (导出SERVER的证书,用来给所有需要用到的客户端导入) 和 %java_home%\bin\keytool -import -file server.crt -keystore % java_home%/jre/lib/security/cacerts  (在客户端的JVM里导入信任的SERVER的证书(根据情况有可能需要管理员权限)
4.在server1配置tomcat使用HTTPS $CATALINA_HOME/conf/server.xml里

<Connector port="8443"   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  enableLookups="false" disableUploadTimeout="true"  acceptCount="100" debug="0" scheme="https" secure="true"  clientAuth="false" sslProtocol="TLS"   keystoreFile="C:\Documents and Settings\new\keystore.keystore"   keystorePass="changeit" />
5.在要使用CAS的客户端client1里设置(以servlets-examples这个APP为例),我们使用ServletFilter(CAS client里提供的)来实现SSO的检查。将cas-client-2.0.11\java\lib文件复制到%tomcat_home%\webapps\servlets- examples\WEB-INF\lib中(没有lib文件夹,自己建一个) 修改servlets-examples/WEB-INF/web.xml

<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://localhost:8443/cas/login</param-value>   </init-param>   <init-param>       <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>       <param-value>https://localhost: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>CASFilter</filter-name>       <url-pattern>/servlet/*</url-pattern>   </filter-mapping>
6.将cas-client-2.0.11.zip解压,把java/lib/casclient.jar拷贝到client1服务器上的webapps/servlets-examples/WEB-INF/lib目录下(如果没有就建一个)

7.导出SERVER的证书,用来给所有需要用到的客户端导入 (在第三步生成这里重复一下) keytool -export -file myserver.cert -alias my-alias-name -keystore keystore.keystore

8.test & done. 把server1和client1分别起来,检查启动的LOG是否正常,如果一切OK,就访问 http://client1:8080/servlets-examples/servlet/HelloWorldExample 系统会自动跳转到一个验证页面,随便输入一个相同的账号,密码,严正通过之后就会访问到真正的HelloWorldExample这个servlet了

取自"http://www.ose.com.cn/wiki/index.php?title=CAS%E9%85%8D%E7%BD%AE%E8%AF%A6%E8%A7%A3"

CAS介绍
From OseWiki
Jump to: navigation, search
CAS背景介绍

CAS(Central Authentication Service),是耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持代理功能。CAS系统在各个大学如耶鲁大学、加州大学、剑桥大学、香港科技大学等得到应用。

Spring Framework的Acegi安全系统支持CAS,并提供了易于使用的方案。Acegi 安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。 Acegi安全系统在国内外得到了广泛的应用,有着良好的社区环境。

CAS的设计目标

(1)为多个Web应用提供单点登录基础设施,同时可以为非Web应用但拥有Web前端的功能服务提供单点登录的功能;

(2)简化应用认证用户身份的流程;

(3)将用户身份认证集中于单一的Web应用,让用户简化他们的密码管理,从而提高安全性;而且,当应用需要修改身份验证的业务逻辑时,不需要到处修改代码。

CAS的实现原理


CAS(Central Authentication Server)被设计成一个独立的Web应用。实现原理非常简单,CAS Server2.0.12的实现只有30个类,除了JDK本身外,只使用到一个 servlet.jar包。它目前的实现是运行在HTTPS服务器的几个Java Servlet上(而客户端可以灵活采用http和https的方式)。通过CAS2.0.12认证的序列图如下图(因图片显示问题,暂时去除)。


CAS在应用中的运行硬件环境 University of Delaware: Sun Fire 280R/ 2x750 MHz/ 4 GB memory/ 550.3 GB disk storage University of Hawaii: a single Sun Netra X1 (UltraSPARC-IIe 500MHz) with 1.0GB RAM dedicated to running CAS. 2. CAS2.0.12中关于ticket的生成


CAS创建一个位数很长的随机数(ticket)。CAS把这个ticket和成功登录的用户以及用户要访问的service联系起来。例如,如果用户peon重定向自service S,CAS创建ticket T,这个ticket T允许peon访问service S。这个ticket是个一次性的凭证;它仅仅用于peon和仅仅用于service S,并且只能使用一次,使用之后马上会过期,即ticket通过验证,CAS立即删除该ticket,使它以后不能再使用。这样可以保证其安全性。

关于ST,在取一个ST时,即使用deleteTicket(ticketId)同时将一次性的ST删除;而对于TGT或PT,则通过resetTimer(ticketId)以更新TGT或PT的时间。在CAS服务端返回的ST中只能得出用户名。

取自"http://www.ose.com.cn/wiki/index.php?title=CAS%E4%BB%8B%E7%BB%8D"



[学习] 使用 CAS 实现 SSO 实践过程
前一段时间曾经研究过一段关于 SSO 的技术,也深知 SSO(Single Sign-On) 是一个博大精深的主题,而我们通常提起的仅仅是所谓的 WebApp SSO,其主要特点是SSO 应用之间走Web协议 ( 如 HTTP/SSL) ,并且 SSO 都只有一个登录入口,SSO 的核心就是所谓的单点登录和身份认证。

CAS(Central Authentication Service) 是 Yale 大学发起的一个开源项目,据统计,大概每 10 个采用开源构建 Web SSO 的 Java 项目,就有 8 个使用 CAS 。对这些统计,我虽然不以为然,但有一点可以肯定的是,CAS 是我认为最简单实效,而且足够安全的 SSO 选择。前一段时间正好做了配置 CAS 的实践,记下主要步骤,以供日后参考。

1.系统配置

以下是必需的软件环境:
1. JDK 1.4.2 or higher
2. Tomcat 5.X
3. JSSE-1_X(安装方法可见下载包)

2. Tomcat 配置,启用SSL

a. 在要安装CAS的机器上为Tomcat生成用于SSL通讯的密钥:%JAVA_HOME%/bin/keytool -genkey -alias tomcat -keyalg RSA
这时需要输入密钥密码和其他参数(第一个参数CN必须设置为CAS机器名,这里架设为 james-huang,本机使用localhost测试),会在系统用户目录中生成.keystore密钥文件。

b. 导出别名为tomcat的密钥文件:%JAVA_HOME%/bin/keytool -export -file /path/server.crt -alias tomcat 这时需要输入上一步设定的密码,结果会在/path/目录生成server.crt信任状。

c. 为客户端的JVM导入密钥::%JAVA_HOME%/bin/keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file /path/server.crt -alias tomcat 注意:输入密码时密码为"changeit",这是默认密码。

d. 修改服务端Tomcat配置文件,启用SSL:修改$CATALINA_HOME/conf/server.xml,去掉有关SSL的那一段的注释,需要 在connector字段中加 keystorePass="password"(password即为1、2步中的密码),keystoreFile="keystorePath" (可以把第一步生成的.keystore复制到$CATALINA_HOME/conf/下,这样keystoreFile= "conf/.keystore")。重启Tomcat,测试 https://james-huang:8443 是否可以访问(推荐将服务器填上Server的机器名)。

3. CAS Server安装

下载CAS Server 3.0.6(可到耶鲁大学官方站或者到 http://www.ja-sig.org/products/cas/ 下载),将其中的cas.war复制到$CATALINA_HOME/webapps下(当然现在CAS中的用户密码认证是很简陋的,产品化必须重写这部分代码,生成新的cas.war)。这时,重启Tomcat应该就可以通过访问 https://james-huang:8443/cas 看到CAS的登录界面了。

4. CAS Client 部署

建议自己创建一个Project以便进行试验(架设工程名为 casclient),下载最新版本的Yale Java CAS Client(2.0.11)并将casclient.jar复制到这两个项目的WEB-INF目录的lib下。修改两个项目的WEB-INF/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://james-huang:8443/cas/login</param-value>
</init-param><!--这里的james-huang是服务端的主机名-->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://james-huang:8443/cas/proxyValidate</param-value>
</init-param><!--这里的james-huang是服务端的主机名,而且必须是-->
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>client:port</param-value><!--client:port就是需要CAS需要拦截的地址和端口,一般就是Client端的IP和port-->
</init-param>
</filter>

<filter-mapping>
<filter-name>CASFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

这样,重启Client端的Tomcat并访问 http://client-ip:8080/casclient,你就会被重定向到Server端的CAS登陆页;此时你可测试登录(默认的认证Handler只要求username=password,可任意选择用户名);登录后就会进入casclient的欢迎页面了;继续定位到http://client-ip:8080/casclient,执行任何一个例子也不用再输入密码。
至此,全部架设过程及测试完毕。当然,这仅仅是一个测试过程,若要实际环境中我们需要到数据库验证用户有效性,我们必须借助到用户数据库。首先,我们需 要创建自己的数据库验证器,当然也可以使用Jasig提供的cas-server-jdbc.jar,通常我们会修改cas-server- jdbc的源码满足自己的需要,并把mysql的jdbc驱动和修改后的jar部署到%CAS%/WEB_INF/lib/下。具体的过程不在这里赘述, 有兴趣的朋友可以自己研究一下。




5. 补充:1、 在多台机器上部署CAS的时候要注意,这些部署的机器必须在同一个域中。2、若在配置过程中出现一些Exception,像“keytool 别名已存在”这些的出错提示,一般都是由于证书导入未成功造成的,若重新生成证书,导入到客户端的同时别忘了把server端的.keystore文件重 新拷贝到Tomcat中去,石头就是由于忘记了这个步骤还调试了老半天呢:)



cas-asp:
<%
    dim cas_server
    cas_server = "http://midp-117:8080/cas/"
   
    function doCasLogin()
        dim uid,ticket,url,backUrl
       
        uid  = Session.Contents("Netid")
       
        if uid="" then
           
            ticket = Request.QueryString.Item("ticket").Item
           
            if ticket="" then
           
                backUrl = CasUtilGetPageUrl()
                url = cas_server+"login?"+"service="+ backUrl
                   
                Response.Redirect(url)
                Response.End
               
            else
               
                if InStr(Request.QueryString,"&ticket")=0 then
                    backUrl = CasGetValidateBackUrl()
                else
                    backUrl = Split(backUrl,"&ticket")(0)
                end if
               
                set http = Server.CreateObject("MSXML2.ServerXMLHTTP")
               
                url  =cas_server+"validate?ticket="+ticket+"&"+"service="+ backUrl
               
                http.open "GET",url,false
                http.send()
               
'                Response.write("text = " + http.responseText)
               
                if InStr(Request.QueryString,"no")=0 then   '// Logon successful
                   
                    'Response.write(Trim(Split(http.responseText,"yes")(1)))
                    Session.Contents("Netid") = Trim(Split(http.responseText,"yes")(1))
                   
                end if
            end if
        end if
    end function

    ' Utils
   
    function CasUtilGetPageUrl()
   
        dim pageUrl
       
        If Request.ServerVariables("https") = "on" Then
            pageUrl = "https"
        Else
            pageUrl = "http"
        End If
       
        ' TODO : Support https protocol !!
        pageUrl = pageUrl & "://" & Request.ServerVariables("server_name")
       
        If Request.ServerVariables("server_port") <> 80 Then
            pageUrl = pageUrl & ":" & Request.ServerVariables("server_port")
        End if
       
        pageUrl = pageUrl & Request.ServerVariables("path_info")
       
        If Request.QueryString <> "" Then
            pageUrl = pageUrl & "?" & server.URLEncode( Request.QueryString )
        End if
        ' We have the current page URL.
        CasUtilGetPageUrl = pageUrl
       
    end function
   
    function CasGetValidateBackUrl()
   
        dim pageUrl
       
        If Request.ServerVariables("https") = "on" Then
            pageUrl = "https"
        Else
            pageUrl = "http"
        End If
       
        ' TODO : Support https protocol !!
        pageUrl = pageUrl & "://" & Request.ServerVariables("server_name")
       
        If Request.ServerVariables("server_port") <> 80 Then
            pageUrl = pageUrl & ":" & Request.ServerVariables("server_port")
        End if
       
        pageUrl = pageUrl & Request.ServerVariables("path_info")

        CasGetValidateBackUrl = pageUrl
       
    end function
   
   
    doCasLogin()
%>

<!--#include file='cas.asp'-->
<%
'需要登陆页面,嵌入此文件即可
dim userid
userid = Session.Contents("Netid")
'Response.write("text = " +  userid)
%>

介绍:
http://www.360doc.com/showWeb/0/0/222129.aspx
分享到:
评论
2 楼 yue198710ss 2012-06-05  
在target那个文件夹下面
1 楼 握着橄榄枝的人 2012-02-20  
第二部:2.将cas-server-3.0.zip解压,并将lib/cas.war拷贝到server1的webapps下
在lib下没有cas.war啊,望指点

相关推荐

    Yale CAS最佳实践.rar

    **Yale CAS(Central Authentication Service)是耶鲁大学开发的一款基于Web的身份验证系统,它允许用户通过单一登录(Single Sign-On, SSO)访问多个应用系统。本篇将详细探讨Yale CAS的最佳实践,包括环境准备、...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录...通过学习和实践,你可以掌握CAS的核心概念,实现自定义认证策略,以及优化客户端集成,从而为你的项目构建一个强大而安全的单点登录系统。

    CAS实现不同应用展示不同的登录页

    同时,确保所有改动符合CAS的安全最佳实践,以防止潜在的安全风险。 总结,实现CAS系统下不同应用展示不同登录页的关键在于理解CAS的工作机制,并对服务器端进行适当的配置和扩展。通过修改登录视图、动态选择页面...

    cas服务端应用

    CAS服务端应用是这个框架的核心部分,它处理用户的身份验证请求,确保用户在访问多个受保护的应用时只需要登录一次。在你提供的信息中,`cas-server-webapp-4.0.0.war` 是一个WAR文件,这是一个Web应用程序的归档...

    struts2+cas单点登陆例子

    Struts2和CAS单点登录(SSO)的集成是一个常见的Web应用安全实践,它允许用户在一个系统登录后,无须再次输入凭证就能访问其他相互信任的系统。在这个例子中,我们将深入探讨如何在MyEclipse环境下使用Struts2框架与...

    cas3.5.2单点登录文档详细配置

    2. 配置CAS Server,包括修改配置文件、部署CAS应用到Tomcat服务器。 3. 配置CAS Client,这可能涉及修改web.xml文件,引入CAS客户端库,并配置客户端的信任CAS Server的地址。 4. 可能需要修改CAS客户端的Java源...

    cas修改登录页

    【标题】"CAS修改登录页"是一个针对中央认证服务(Central Authentication Service,简称CAS)的定制化实践。在单点登录(Single Sign-On,SSO)系统中,CAS扮演着核心角色,它提供了统一的身份验证服务,使得用户只...

    CAS单点登录Demo

    在本文中,我们将深入探讨CAS单点登录的基本原理、工作流程以及如何通过提供的Demo进行实践操作。 **CAS基本原理** CAS的核心思想是用户只需在一个应用系统中验证身份,之后访问其他所有支持CAS的应用系统时都不再...

    cas4.1.2+redis实践

    jdk1.8,其中用到redis存储tickets,使用了代理模式、restful、自定义用户验证等,由于文件大小的限制,client1和casproxy只有应用,把其解压后下面的目录拷贝到tomcat下的webapp即能使用,如果没有redis需要修改...

    cas client

    CAS(Central Authentication Service)客户端是一种身份验证框架,用于实现单点登录...通过实践和调试这个示例项目,你可以深入理解CAS客户端的工作原理,并能将其应用于自己的项目中,提升用户认证的安全性和便利性。

    cas 官方提供的例子改造

    【标题】"CAS官方提供的例子改造"涉及到的核心知识点是单点登录(Single Sign-On, SSO)系统,特别是关于CAS(Central Authentication Service)的实践应用。CAS是一种开放源码的SSO协议,它允许用户通过一个认证...

    前后端分离集成cas

    在Spring Boot应用中集成CAS,需要配置CAS客户端,处理CAS服务返回的令牌,完成用户的登录验证。 项目的具体实现流程可能包括以下步骤: 1. 使用Spring Initializr初始化Spring Boot项目,选择需要的依赖如Web、...

    cas spnego认证方式(即加ad域的windows主机应用免登录)高可用集群方案(目前来看国内第一份资料,本人探索出来的)

    ### cas spnego认证方式高可用集群方案 ...该方案不仅解决了传统CAS集群中的常见问题,还针对SPNEGO认证模式下特有的技术难题提供了详尽的解决思路与实践指南,为企业级应用的安全稳定运行提供有力支持。

    cas结合 springmvc shiro 单点登录

    本项目是关于如何将CAS(Central Authentication Service)与SpringMVC和Shiro结合实现SSO的实践示例。 首先,我们来了解一下三个主要组件: 1. **CAS**: CAS是一个开源的身份验证框架,主要用于处理用户身份验证...

    cas单点登录

    单点登录(Single Sign-On,简称SSO)是一种网络身份验证机制,允许用户在一个系统上登录后,无需再次输入...通过理解和实践CAS Server的配置以及客户端的集成,开发者可以有效地在自己的应用环境中实现单点登录功能。

    cas源码修改-登录页面

    CAS(Central Authentication Service)是一种广泛使用的开放源码身份验证框架,它允许用户通过单一登录(Single Sign-On,SSO)访问多个应用系统。在“cas源码修改-登录页面”这个主题中,我们将深入探讨如何定制...

    cas-client-core-3.3.3

    CAS(Central Authentication Service)是一种基于Web的单点登录(Single Sign-On, SSO)协议,主要用于简化用户在多个应用系统间的登录流程。`cas-client-core-3.3.3` 是一个CAS客户端的核心库,它使得应用程序能够...

    springboot+cas5.x+shiro+pac4j实现sso集成

    用户只需在CAS服务器上登录一次,就可以访问所有已集成的CAS客户端应用。 3. **Shiro** Apache Shiro是一个Java安全框架,它处理认证、授权、会话管理和加密等功能。在SSO环境中,Shiro作为SpringBoot应用的客户端...

    CAS-Server-Client单点登录demo

    总之,CAS-Server-Client单点登录demo提供了一个实践SSO功能的平台,帮助开发者理解如何在不同应用间实现统一身份验证。通过对CAS服务器和客户端的配置,以及在Apache Tomcat上进行测试,你可以深入掌握SSO的工作...

    cas-proxy认证

    - **传递 PT 给被代理应用**:将 PT 作为参数传递给被代理应用,被代理应用使用 PT 向 CAS 服务器验证身份。 - **多次使用 PGT**:为了支持访问多个后端服务,一个 PGT 可以多次使用,即向 CAS 服务器索要多个 PT。 ...

Global site tag (gtag.js) - Google Analytics