`

cas 单点登录

    博客分类:
  • cas
阅读更多

目的:使用单点登录系统统一管理各子系统的用户登录登出,并提供一个统一的集成页面,方便用户在各系统之间的快速切换。
环境:cas-server-3.3.1,cas-client-2.0.11

一:配置服务器端的数字证书

    1
,生成数字证书

         ./keytool -genkey -alias examplecas -keypass changeit -keyalg RSA -keystore server.keystore
     
    2
,导出数字证书

         ./keytool -export -alias examplecas -keypass changeit -file server.crt -keystore server.keystore

    3
,将数字证书导入jre的可信区

          ./keytool -import -alias examplecas -file server.crt -keypass changeit -keystore ../jre/lib/security/cacerts
   
   
其他的一些命令:
   
查看可信证书列表(检查证书是否加入成功)
    ./keytool -list -keystore ../jre/lib/security/cacerts

   
常用命令:

 

-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
-alias
产生别名
-keystore
指定密钥库的名称(产生的各类信息将不在.keystore文件中
-keyalg
指定密钥的算法
-validity
指定创建的证书有效期多少天
-keysize
指定密钥长度
-storepass
指定密钥库的密码
-keypass
指定别名条目的密码
-dname
指定证书拥有者信息例如: "CN=firstName,OU=org,O=bj,L=bj,ST=gd,C=cn"
-list
显示密钥库中的证书信息 keytool -list -v -keystore 别名 -storepass ....
-v
显示密钥库中的证书详细信息
-export
将别名指定的证书导出到文件 keytool -export -alias 别名 -file 文件名.crt
-file
参数指定导出到文件的文件名
-delete
删除密钥库中某条目 keytool -delete -alias 别名 -keystore sage
-keypasswd
修改密钥库中指定条目口令 keytool -keypasswd -alias 别名 -keypass .... -new .... -storepass ... -keystore 别名
-import
将已签名数字证书导入密钥库 keytool -import -alias 别名 -keystore 证书名-file 文件名(可以加.crt 后缀)

 

    注意:
    1
,生成数字证书的时候必须使用主机名或者域名作为证书名称(CN),
        
例如sso.example.comCN=sso.example.com, OU=example, O=example, L=beijing, ST=beijing, C=china
    2
,检查JAVA_HOME环境变量(echo $JAVA_HOME),确认tomcat使用了那一个jre(有时候一台机器上会有

         多个jre),需要将生成的证书文件导入至web服务器使用的那个jre的信任证书列表中,可以使用keytool -list

         命令检查证书是否导入成功。

二:配置服务器端tomcat 6.0server.xml
   
打开被注释掉的https配置区,添加keystoreFilekeystorePasstruststoreFile属性配置。

Xml代码 复制代码

  1. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"  
  2.         maxThreads="150" scheme="https" secure="true"  
  3.         clientAuth="false" sslProtocol="TLS"  
  4.                 keystoreFile="/usr/java/default/bin/server.keystore"  
  5.                 keystorePass="changeit"  
  6.                 truststoreFile="/usr/java/default/jre/lib/security/cacerts"  
  7.     />  

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

        maxThreads="150" scheme="https" secure="true"

        clientAuth="false" sslProtocol="TLS"

                keystoreFile="/usr/java/default/bin/server.keystore"

                keystorePass="changeit"

                truststoreFile="/usr/java/default/jre/lib/security/cacerts"

    />

 


   
如果需要则为cas server配置虚拟主机

Xml代码 复制代码

  1. <Host name="sso.example.com"  appBase="webapps"  
  2.         unpackWARs="true" autoDeploy="true"  
  3.         xmlValidation="false" xmlNamespaceAware="false">  
  4.     </Host>  

<Host name="sso.example.com"  appBase="webapps"

        unpackWARs="true" autoDeploy="true"

        xmlValidation="false" xmlNamespaceAware="false">

    </Host>

 

   cas-server-3.3.1-release\cas-server-3.3.1\modules\cas-server-webapp-3.3.1.war解压并

   放至 webapps/cas3目录后,可通过https://sso.example.com:8443/cas3/login 访问cas server登录页面。


三:配置一个最简单的cas server端。
    1
,新建数据表

Sql代码 复制代码

  1.    create table users   
  2. (   
  3.    id                   int not null auto_increment,   
  4.    username             varchar(50) not null,   
  5.    password             varchar(50) not null,   
  6.    primary key (id)   
  7. );  

       create table users

    (

       id                   int not null auto_increment,

       username             varchar(50) not null,

       password             varchar(50) not null,

       primary key (id)

    );

 


    user
表中添加需要认证的用户数据。
    2
,在 WebRoot/WEB-INF/spring-configuration/文件夹下新建一个spring的配置文件,配置dataSource对象
    3
,修改WebRoot/WEB-INF/deployerConfigContext.xml配置文件,将:

Xml代码 复制代码

  1. <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

 

       替换为:

Xml代码 复制代码

  1. <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
  2.     <property name="sql" value="select password from users where username=?" />  
  3.             <property name="dataSource" ref="dataSource" />  
  4. </bean>  

    <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

        <property name="sql" value="select password from users where username=?" />

                <property name="dataSource" ref="dataSource" />

    </bean>

 



四:配置客户端服务器。
   
客户端的服务器同样需要导入服务器端生成的数字证书,否则在cas server回调客户端页面的时候将会抛出以下异常:

Java代码 复制代码

  1. javax.servlet.ServletException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target   
  2.     edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:254)   
  3.     edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)  

javax.servlet.ServletException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    edu.yale.its.tp.cas.client.filter.CASFilter.getAuthenticatedUser(CASFilter.java:254)

    edu.yale.its.tp.cas.client.filter.CASFilter.doFilter(CASFilter.java:184)

 

    提示找不到有效的证书路径。
   
配置步骤:
    1
,拷贝服务器端生成的server.crt文件至客户端jre/bin目录下
    2
,执行:
        C:\Program Files\Java\jre1.6.0_06\bin>keytool -import -alias examplecas -file server.crt -keypass changeit -keystore ..\lib\security\cacerts
    3
,查看是否添加成功
        C:\Program Files\Java\jre1.6.0_06\bin>keytool -list -keystore ..\lib\security\cacerts

五:修改客户端增加单点登录支持。
    1
,修改web.xml文件:

Xml代码 复制代码

  1. <filter>  
  2.     <filter-name>CAS Filter</filter-name>  
  3.             <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>  
  4.             <init-param>  
  5.                     <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>  
  6.                     <param-value>https://sso.example.com:8443/cas3/login</param-value>  
  7.             </init-param>  
  8.             <init-param>  
  9.                     <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>  
  10.                     <param-value>https://sso.example.com:8443/cas3/serviceValidate</param-value>  
  11.             </init-param>  
  12.             <init-param>  
  13.                     <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>  
  14.                     <param-value>sso.example.com</param-value>  
  15.             </init-param>  
  16.     </filter>  
  17.   
  18.     <filter-mapping>  
  19.             <filter-name>CAS Filter</filter-name>  
  20.             <url-pattern>/portal/portal.jsp</url-pattern>  
  21.     </filter-mapping>   

    <filter>

        <filter-name>CAS Filter</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://sso.example.com:8443/cas3/login</param-value>

                </init-param>

                <init-param>

                        <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>

                        <param-value>https://sso.example.com:8443/cas3/serviceValidate</param-value>

                </init-param>

                <init-param>

                        <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>

                        <param-value>sso.example.com</param-value>

                </init-param>

        </filter>

 

        <filter-mapping>

                <filter-name>CAS Filter</filter-name>

                <url-pattern>/portal/portal.jsp</url-pattern>

        </filter-mapping>

 

  
    2
,增加子系统的登录接口,支持集成页面(portal.jsp)的访问请求。
      
例如,老系统的登录页面和主页面分别是login.jsp,main.jsplogin.jsp负责验证用户是否合法,合法则将用户
      
数据存入该系统的session对象当中,main.jsp负责分配用户在该系统内的访问权限及页面的初始化),为了不影
      
响老系统的正常访问,尽可能保证独立性可以实现两个仅供portal.jsp调用的类似页面(cas-login.jsp,cas-main.jsp.
       cas-login.jsp
中可以获得cas server传递给我们的用户名称。

Java代码 复制代码

  1. String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);  

       String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);

 

       根据获得的用户名称再去本地数据库查找用户信息,完成验证及角色权限初始化的工作。

六:总结一下:
    1
,单点登录仅仅帮助我们在各个子系统中间安全的共享了一下用户名,省去了用户重复登陆的麻烦,统一了用户

         帐户的管理,至于用户在每个系统中的权限分配,还是继续交给子系统完成吧。可以开发一个cas server端的

         集成界面(portal),方便用户在各个子系统中间的快速切换。
    2
,为了完善cas server的用户管理功能,需要在cas server,client端各自开放几个调用接口,保证子系统与

         cas server端的账户信息同步。
    3
,改造老系统时尽量为portal的集成开发新的访问入口(而不是去修改以前的代码使之兼容),这样既可以从集

        portal访问,又可以从原有的访问地址访问。

    4,配置server端及client的服务器时候一定要找对tomcat究竟在使用那一个jrewindows上查看

         %JAVA_HOME%变量,linuxecho $JAVA_HOME.
    5
server端及client端的服务器均需要导入数字证书,否则cas server端回调客户端页面时将会抛出:
         PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
      
异常。

分享到:
评论

相关推荐

    cas 单点登录 解决方案.

    cas 单点登录解决方案 cas 单点登录解决方案是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。随着企业的发展,业务系统的数量...

    cas单点登录

    总之,CAS单点登录系统提供了统一的身份验证入口,简化了用户登录过程,提高了用户体验。通过理解和实践CAS Server的配置以及客户端的集成,开发者可以有效地在自己的应用环境中实现单点登录功能。

    基于Java集成CAS单点登录【接部署即可启用】

    基于Java中CAS的单点登录,有服务端的所有源码,将tomcat目录下的所有资源直接拷到Tomcat服务中间件的webapp目录下,阅读tomcat-webapp中的read.txt文档,查看使用说明,适用于第一次开发CAS单点登录的同学们,简单...

    CAS单点登录操作文档

    CAS单点登录操作文档 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点: • 开源的企业级单点登录解决...

    CAS单点登录demo

    在本“CAS单点登录demo”中,我们将深入探讨CAS的工作原理、配置步骤以及如何实现客户端与服务器端的交互。 1. CAS工作原理: CAS的核心思想是集中式的身份验证,用户只需在一个地方进行登录,之后访问其他已经...

    CAS单点登录系统之java实现(part_1)

    资源列表(1:cas CAS Server,2:Cas_Client_One 授权系统,3:graduationDesign 用户组织管理系统,4:CAS单点登录论文.doc,5:CAS单点登录文献综述.doc,6:基于CAS的用户管理单点登录门户系统ppt.ppt)

    CAS单点登录配置

    在提供的PDF文件`cas单点登录(一).pdf`和`cas单点登录(二).pdf`中,应该详细涵盖了这些步骤,以及更深入的技术细节,包括可能出现的问题和解决方案。通过学习这些文档,你应该能够成功地配置和实施CAS单点登录...

    CAS单点登录

    cas单点登录war包,可以直接放到tomcat下面webapps

    CAS单点登录(java)

    CAS单点登录CAS单点登录CAS单点登录CAS单点登录

    CAS单点登录多语言整合文档+源码

    这个压缩包文件包含的是关于CAS单点登录的多语言整合文档和源码,特别提到了PHP客户端和Java客户端的整合。 首先,我们来深入理解一下CAS的基本工作原理。当用户尝试访问受CAS保护的应用时,会被重定向到CAS服务器...

    CAS单点登录配置大全

    **CAS单点登录配置大全** CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On,SSO)协议。它允许用户通过一个统一的认证系统访问多个应用系统,而无需在每个系统...

    .net cas单点登录

    这个项目可能包含配置文件、控制器代码、视图模板和其他相关资源,展示了如何在实际应用中实现CAS单点登录功能。 综上所述,.NET CAS单点登录涉及到了身份验证、票证机制、客户端和服务器之间的交互等多个核心概念...

    CAS单点登录例子,包含服务端和客户端

    综上所述,这个压缩包提供了一个完整的CAS单点登录实例,包括服务端和客户端的实现,可以帮助开发者理解并部署自己的CAS系统。通过深入研究和实践,你可以掌握如何利用CAS实现Web应用的安全、便捷的单点登录功能。

    cas单点登录技术

    点登录系统设计..................................................附件部分提供了在不同应用服务器(如WebLogic、Tomcat)上配置和实现CAS单点登录的指南,包括使用LDAP进行用户认证的步骤,为实际部署提供了参考。

    基于java语言开发的cas单点登录系统

    **基于Java语言开发的CAS单点登录系统** CAS(Central Authentication Service)是一种广泛使用的开源单点登录(Single Sign-On,SSO)框架,主要由耶鲁大学开发并维护。它旨在提供一种简单、安全的方式,使得用户...

    CAS单点登录时序图.puml

    CAS单点登录时序图,UML源码

    cas单点登录服务端

    CAS(Central Authentication ...总的来说,CAS单点登录服务端的部署涉及了Web应用的部署、应用服务器的管理、服务定义配置、用户认证集成以及安全性考量等多个方面,是构建安全、便捷的多应用系统环境的关键组件。

Global site tag (gtag.js) - Google Analytics