`

小蚂蚁-CAS单点登录系列(3)-简单实施SSO

阅读更多

   默认时,为了启用Web SSO,开发者必须开启HTTPS传输通道。由于传回CASTGC Cookie到CAS服务器需要走HTTPS通道,因此开发者必须准备好X.509 CA证书。当然,您也可以选择修改这一默认行为,但从安全性的角度考虑,不推荐这样做。


1.使用keytool生成根证书
1.1.查看jre信任的证书

(1)查看jre中所有信任的证书信息
keytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

(2)查看别名为root的证书信息
keytool -v -list -alias root -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit


1.2.删除jre中别名为root的证书
keytool -delete -alias root -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

1.3.开始生成根证书
确认jre中不存在别名为root的证书之后,我们开始生成根证书。
(1)生成密钥库文件root.keystore
keytool -genkey -keyalg RSA -alias root -dname " CN=localhost, OU=javaeeOU, O=javaee, L=GuangZhou, ST=GuangDong, C=CN" -storepass changeit -keystore root.keystore
使用默认密码,直接回车。

(2)导出别名为root的证书,证书名root.crt
keytool -export -alias root -file root.crt -storepass changeit -keystore root.keystore

(3)将证书导入到jre信任证书库中
keytool -import -alias root -file root.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

(4)查看别名为root的证书信息,确认成功导入到jre信任证书库中
keytool -v -list -alias root -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit


2.启用HTTPS
2.1.在Tomcat中启用HTTPS配置

打开Tomcat目录下的conf/server.xml文件,添加Connector代码如下:
 

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" minSpareThreads="2" maxSpareThreads="10"
			   scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
			   keystoreFile="conf/root.keystore" keystorePass="changeit"
			   truststoreFile="E:/DevelopTools/JDK/jdk1.5.0_10/jre/lib/security/cacerts" />




 

其中:
keystoreFile指向密钥库文件root.keystore
keystorePass默认为changeit
truststoreFile指向jre信任的证书库文件

2.2.安装证书
   启动Tomcat,访问地址:https://localhost:8443/cas3,浏览器将会返回证书错误界面:


单击“继续浏览此网站(不推荐)”链接,查看并将证书导入到浏览器中:


    单击“查看证书”,弹出证书安装界面:


    单击“安装证书”,进入证书导入向导界面:


选择“受信任的根证书颁发机构”,接下来只需要一路选择“下一步”或者“是”直至导入成功。

证书导入成功后,重新浏览器并访问地址:https://localhost:8443/cas3,将会看到类似于下图的锁图标,并可单击该图标查询证书信息,这表示证书已安装成功,正确启用了HTTPS。



3.对Web应用实施SSO
   
Web应用采用Tomcat自带的servlet例子Hello World,默认访问路径为http://localhost:8080/examples/servlets/servlet/HelloWorldExample。在没有对该servlet实施SSO之前,启动Tomcat后访问结果如下图所示:


    接下来,我们将对该servlet实施SSO,配置步骤如下:
3.1.添加Cas Client相应Jar包

   
只需要添加两个Jar包:cas-client-core-3.1.10.jar、commons-logging-1.0.4.jar,将其拷贝到Tomcat安装目录下的webapps\examples\WEB-INF\lib目录下。


3.2.配置web.xml文件

   
对于Cas Client在web.xml文件中的配置,主要包括两个方面,一个是过滤器的配置,另一个是监听器的配置。


3.2.1.过滤器配置

主要有以下5个过滤器:
1.SingleSignOutFilter
2.AuthenticationFilter
3.TicketValidationFilter (whichever one is chosen)
4.HttpServletRequestWrapperFilter
5.AssertionThreadLocalFilter
对于这5个过滤器,在web.xml中的配置必须严格按照以上顺序进行声明。
  其中,AuthenticationFilter、TicketValidationFilter是必须配置的,其他3个过滤器是可选的。特别的,如果配置了SingleSignOutFilter,必须配合SingleSignOutHttpSessionListener这一监听器进行使用。

3.2.1.1.SingleSignOutFilter

该过滤器用于实现单点登出功能,可选配置。配置如下:

<filter>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <filter-class>
        org.jasig.cas.client.session.SingleSignOutFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
</filter-mapping>
 

3.2.1.2.AuthenticationFilter
该过滤器负责用户的认证工作,必须启用它。配置如下:

<filter>
    <filter-name>CAS Authentication Filter</filter-name>
    <filter-class>
        org.jasig.cas.client.authentication.AuthenticationFilter
    </filter-class>
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>https://localhost:8443/cas3/login</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>localhost:8080</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CAS Authentication Filter</filter-name>
    <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
</filter-mapping>
 

3.2.1.3.TicketValidationFilter
该过滤器负责对Ticket的校验工作,必须启用它。配置如下:

<filter>
    <filter-name>CAS Validation Filter</filter-name>
    <filter-class>
        org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
    </filter-class>
    <init-param>
        <param-name>casServerUrlPrefix</param-name>
        <param-value>https://localhost:8443/cas3</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>localhost:8080</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
</filter-mapping>
 

3.2.1.4.HttpServletRequestWrapperFilter
该过滤器负责实现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>/servlets/servlet/HelloWorldExample</url-pattern>
</filter-mapping>
 

3.2.1.5.AssertionThreadLocalFilter 该过滤器使得开发者可以通过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>/servlets/servlet/HelloWorldExample</url-pattern>
</filter-mapping>
 


3.2.2.监听器配置

    当配置了SingleSignOutFilter过滤器,即对Web应用实施单点登出功能时,需要在web.xml中添加以下监听器:

<listener>
    <listener-class>
        org.jasig.cas.client.session.SingleSignOutHttpSessionListener
    </listener-class>
</listener>
 

3.2.3.启动应用
    配置完成后,重新启动Tomcat,并访问地址http://localhost:8080/examples/servlets/servlet/HelloWorldExample,由于该servlet已受到Cas的保护,所以我们会被引导到Cas登录页面。
    只有通过Cas认证,才能真正的访问到http://localhost:8080/examples/servlets/servlet/HelloWorldExample这个servlet。




分享到:
评论
1 楼 weifeng127 2011-08-21  
请教一下,关于CA安全证书的问题。
企业用CAS实现单点登录时,使用的证书必须要购买吗?自制的安全证书可以吗?
请不吝赐教!

相关推荐

    小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二

    《小蚂蚁-CAS单点登录系列(5)-简单实施SSO之二》 单点登录(Single Sign-On,简称SSO)是企业信息化系统中一个重要的功能,它允许用户通过一次登录,就能访问多个相互独立的应用系统,无需多次输入用户名和密码。本...

    单点登录sso-shiro-cas-maven

    spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次 ## 系统模块说明 1. cas: 单点登录模块,这里直接拿的是cas的项目改了点样式而已 2. doc: 文档目录,里面有数据库生成语句,采用的...

    java-cas单点登录服务端

    单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS(Central Authentication ...

    CAS--SSO单点用到的jar包

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,简称SSO)框架。SSO允许用户在访问多个应用系统时只需要进行一次身份验证,之后访问其他系统无需再次输入凭证,提高...

    CAS单点登录SSO( Single Sign-On)

    CAS单点登录协议是解决多应用系统认证问题的有效方案。通过深入学习和理解CAS的工作机制,开发者能够更好地实现和维护安全、高效的SSO系统。同时,源码分析有助于定制化需求和故障排查,确保CAS在实际环境中的稳定...

    .net-casSSO-client.rar

    .NET CAS SSO客户端是一款专为.NET开发者设计的身份验证解决方案,它允许用户通过中央认证服务(Central Authentication Service,简称CAS)实现单点登录(Single Sign-On,简称SSO)。CAS是一种开放源码的Web身份...

    sso/cas单点登录Java maven版 含服务端客服端

    SSO(Single Sign-On)是单点登录的缩写,是一种网络用户身份验证的机制,允许用户在一次登录后访问多个应用系统而无需再次验证。CAS(Central Authentication Service)是SSO的一种实现,由耶鲁大学开发并开源,它...

    CAS单点登录(SSO)教程

    ### CAS单点登录(SSO)教程详解 #### 前言 随着企业信息化建设的不断发展,用户需要在多个系统之间切换并重复登录的情况越来越常见,这不仅降低了用户体验,还增加了管理成本。为了解决这一问题,单点登录(Single ...

    cas-server-webapp-4.0.0单点登录(带超详细文档、数据连接jar包、c3p0)可运行

    单点登录 sso cas带超详细文档,包含(cas-server-webapp-4.0.0.war、c3p0-0.9.1.2.jar、cas-client-core-3.3.3.jar、cas-server-support-jdbc-4.0.0.jar、cas-server-webapp-support-4.0.0.jar、commons-logging-...

    spring boot 实现SSO单点登陆

    spring boot整合spring security 实现SSO单点登陆 完整DEMO. 1、配置本地hosts 127.0.0.1 sso-login 127.0.0.1 sso-resource 127.0.0.1 sso-tmall 127.0.0.1 sso-taobao windows系统的路径在C:\WINDOWS\system...

    Java进阶SSO单点登录技术CAS-快速上手与原理探究视频教程

    本课程主要通过CAS来实现SSO,本教程会从最基本的基础知识讲起,由浅入深再到实战,完成多应用的单点登录功能。 本课程内容如下: 1、 什么是SSO和CAS 2、 CAS Server服务端和客户端的搭建和配置 3、 单点登录和单...

    cas 单点登录 解决方案.

    3. 系统集成:cas 单点登录解决方案需要与不同的应用系统集成,以便用户可以使用单点登录访问所有相互信任的应用系统。 cas 单点登录解决方案可以带来许多好处,但是也存在一些挑战和限制。例如,cas 单点登录解决...

    网上简单的SSO CAS 单点登录源码

    本源码集合为一个简单的Java实现的SSO CAS单点登录示例,适合初学者理解和实践SSO原理。 首先,我们需要理解SSO的基本流程: 1. 用户尝试访问受保护的应用A。 2. 应用A发现用户未登录,重定向到CAS服务器的登录页面...

    CAS实现sso单点登录原理

    "CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...

    web-sso单点登录源码

    单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现...

    sso.rar_DotNetCasClient.dll_sso_sso 单点登录_单点登录_鍗曠偣鐧诲綍

    "跨平台跨服务器跨网站SSO(单点登录)的方案.doc"可能包含了一个详细的SSO实施策略,涵盖了不同操作系统、服务器环境和网站间的集成。文档可能包含了以下内容:系统架构设计、CAS服务器的部署和配置、客户端应用...

    CAS-Server-Client单点登录demo

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

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

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

Global site tag (gtag.js) - Google Analytics