Cas-server服务器搭建3.3.1

Cas-server服务器搭建3.3.1

作者:wangmj

创建日期:2009-06-05

修改日期:2009-07-02

版本:1.1

制作并导入证书

生成密钥

首先进入目录E:/javagood/cas-server-3.3.1

 

 

注意:现在使用的是jdk1.6.0_14

E:/javagood/cas-server-3.3.1>set PATH=d:/jdk1.6.0_14/bin;%PATH%

 

 

E:/javagood/cas-server-3.3.1>set PATH=d:/jdk1.6.0_14/bin;%PATH%

 

E:/javagood/cas-server-3.3.1>keytool -genkey -alias tomcat -keystore ./mydestore

 -keyalg RSA -validity 2000

输入keystore密码:

再次输入新密码:

您的名字与姓氏是什么?

  [Unknown]  localhost

您的组织单位名称是什么?

  [Unknown]  jiangquankeji

您的组织名称是什么?

  [Unknown]  youxianzerengongsi

您所在的城市或区域名称是什么?

  [Unknown]  jinan city

您所在的州或省份名称是什么?

  [Unknown]  shandong

该单位的两字母国家代码是什么

  [Unknown]  zh

CN=localhot, OU=jiangquankeji, O=youxianzerengongsi, L=jinan city, ST=shandong,

C=zh 正确吗?

  []  y

 

输入<tomcat>的主密码

        (如果和 keystore 密码相同,按回车):

 

E:/javagood/cas-server-3.3.1>

 

导出认证

 

E:/javagood/cas-server-3.3.1>keytool -export -alias tomcat -keystore ./mydestore

 -file server.crt

输入keystore密码:

保存在文件中的认证 <server.crt>

注意:必须手工输入命令行

E:/javagood/cas-server-3.3.1>

导入到jdk的密钥库

E:/javagood/cas-server-3.3.1>keytool -import -alias tomcat -file ./server.crt -k

eystore D:/jdk1.6.0_14/jre/lib/security/cacerts

输入keystore密码:

所有者:CN=localhot, OU=jiangquankeji, O=youxianzerengongsi, L=jinan city, ST=sha

ndong, C=zh

签发人:CN=localhot, OU=jiangquankeji, O=youxianzerengongsi, L=jinan city, ST=sha

ndong, C=zh

序列号:4a4d52cf

有效期: Fri Jul 03 08:37:35 CST 2009 Wed Dec 24 08:37:35 CST 2014

证书指纹:

         MD5:C2:6E:E6:BC:21:E3:53:57:42:3F:B1:58:6D:4B:B9:AF

         SHA1:E5:9D:81:6E:2C:77:0F:7E:14:6A:3D:74:1E:FD:DD:02:11:F2:1C:FF

         签名算法名称:SHA1withRSA

         版本: 3

信任这个认证? []  y

认证已添加至keystore

 

E:/javagood/cas-server-3.3.1>

删除重复的证书

E:/javagood/cas-server-3.3.1>keytool -import -alias tomcat -file ./server.crt -k

eystore d:/jdk1.6.0_14/jre/lib/security/cacerts

输入keystore密码:

keytool错误: java.lang.Exception: 认证未输入,别名 <tomcat> 已经存在

 

E:/javagood/cas-server-3.3.1>keytool -delete -alias tomcat -file ./server.crt -k

eystore d:/jdk1.6.0_14/jre/lib/security/cacerts

输入keystore密码:

 

配置JBOSS4.2.3 (server.xml)

D:/jboss-4.2.3.GA/server/default/deploy/jboss-web.deployer/server.xml

 

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

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

       clientAuth="false" sslProtocol="TLS"

       keystoreFile="e:/javagood/cas-server-3.3.1/mydestore "

       keystorePass="changeit" />

 

配置cas服务器

E:/javagood/cas-server-3.3.1/modules/cas-server-webapp-3.3.1.war

拷贝到D:/jboss-4.2.3.GA/server/default/deploy/下面,并且更名为cas-server.war

 

启动jboss4.2.3,注意jboss使用的jdk必须是刚才将认证导入的jdk,我们使用的是d:/jdk1.5.0

注意:现在使用的是jdk1.6.0_14

 

IE浏览器中录入:http://localhost:8080/cas-server

登陆,录入的用户名和密码相同即可。

登陆后可以看到默认的画面:

 

注意:E:/javagood/cas-server-3.3.1/mydeystore 文件不能删除,或者将名称写错,否则服务器会报找不到的文件。

配置cas 客户端

 

这里以ajaxtags-demo-1.5.war displaytag-examples-1.2.war两个web程序作为示例

 

还没有配置cas程序的时候,http://localhost:8080/ajaxtags-demo-1.5/

 

 

 

 

IE的地址栏中录入:http://localhost:8080/displaytag-examples-1.2/

 

 

开始配置cas的内容,增加单点登陆功能

 

E:/javagood/cas-client-2.0.11/java/lib找到casclient.jar

E:/javagood/cas-client-3.1.3/modules 找到cas-client-core-3.1.3.jar commons-logging-1.1.jar

 

然后将这三个jar包拷贝到D:/jboss-4.2.3.GA/server/default/deploy/ajaxtags-demo-1.5.war/WEB-INF/lib

D:/jboss-4.2.3.GA/server/default/deploy/displaytag-examples-1.2.war/WEB-INF/lib 下面

 

在两个web应用对应的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>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://localhost:8443/cas-server/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-server/serviceValidate</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>CAS Single Sign Out Filter</filter-name>

   <url-pattern>/*</url-pattern>

</filter-mapping>

<filter-mapping>

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

   <url-pattern>/*</url-pattern>

</filter-mapping>

 

 

开始访问测试

先登陆http://localhost:8080/ajaxtags-demo-1.5/,系统会自动跳转到cas-server

登陆ajaxtags url自动增加一个ticket

在当前的IE窗口,在录入http://localhost:8080/displaytag-examples-1.2/  可以自动访问,如果点击IE图标打开一个新的IE窗口,录入http://localhost:8080/displaytag-examples-1.2/,这个时候还是无法认证通过,还会自动跳转到cas-server

 

 

单点登陆退出

如何退出?

访问https://localhost:8443/cas-server/logout就退出了。

注意事项:

访问形如http:// localhost:8080/cas-server/logout,这种通过http方式访问退出是不行的!!因为你不通过https来注销,CAS Server怎么""掉它通过https发给你的TGC Cookie?

 

经过测试,通过http://localhost:8080/cas-server/logout 退出登陆后,确实可以再次访问当前的web程序,可见不通过https是无法真正退出单点登陆的

 

单点登陆后,如何和业务系统结合?如何获取登录后的用户名等信息?

每个业务系统都有自己单独的权限控制,cas单点登陆后,如何和原来业务的权限系统结合?

如何将用户的id传递到原来系统中去?

login-user-name:<%=session.getAttribute("edu.yale.its.tp.cas.client.filter.user")%>

经过测试,可以获取到用户名,因为用户名是唯一的,获取到了用户名,那么用户的id,从数据再查询一下不就获取到了吗,hehe(虽然多访问了一次数据库,因为不是频繁访问,方案还是可以的。)

CAS Client端的API应用1.用户可以通过以下两种方式的任意一种,从JSPservlet中获取通过认证的用户名:

引用

String username = (String)session.getAttribute(CASFilter.CAS_FILTER_USER);
或者
String username = (String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user");



2
.获得更完整的受认证用户信息对象CASReceipt Java Bean,可以使用以下语句的任一:

引用

CASReceipt  receipt = (CASReceipt )session.getAttribute(CASFilter.CAS_FILTER_RECEIPT);
或者
CASReceipt  receipt = (CASReceipt )session.getAttribute("edu.yale.its.tp.cas.client.filter.receipt");

 

定制和扩展1:定制登录页面试图

 

在目录“ cas-server/WEB-INF/view/jsp/default/ui ”

l        casConfirmView.jsp:当用户选择了“ warn ”时会看到的确认界面

l        casGenericSuccess.jsp:在用户成功通过认证而没有目的Service时会看到的界面

l        casLoginView.jsp:当需要用户提供认证信息时会出现的界面

这个页面可能会首先被定制

l        casLogoutView.jsp:当用户结束 CAS单点登录系统会话时出现的界面

 

在目录“cas_server /WEB-INF/view/jsp/default/ui/includes ”

l        top.jsp:上述4个文件的头部文件

l        buttom.jsp:上述4个文件的尾部文件

 

在目录“cas_server /WEB-INF/classes ”

l        包含各个语言的porp文件(比较casLoginView.jsp文件)

 

在目录“cas_server /js”

l         common_rosters.js(参见casLoginView.jsp文件注释)

 

 

实现单点登陆后,用户如何管理?

 

例如在cas-server进行认证的时候,可以通过数据库、ldap等方式认证用户,然后每个系统都有自己的用户,A系统的用户和B系统中的用户名称id和账户都不一致,如何进行统一。

 

例如cas-server认证的时候是以A系统的用户认证还是以B系统的用户认证?A系统的用户账号是aa,姓名张三,在B系统中账号是bb,姓名还是张三,也就是说同一个用户,在不同的系统中账户不同,单点登陆后,如果是cas-server是以aa进行的认证,在登陆B系统的时候,如何与B系统中的账户bb关联上?

 

 

解决方法一:

在系统中所有的与业务关联的都是用用户ID,而不要使用账号关联,账号就可以随意改动,这样在实现单点登陆的时候,获取到用户的账号,然后把账号传递给业务系统;以后所有新开发的系统用户的账号统一,就可以实现单点登陆了,但是如何保证账户维护一致呢?这个就需要用户自己统一账号了。

 

解决方法二:

 

正在思考中......

 

 

关于多系统整合的问题

我的问题是这样的:现有几个系统(均是web的),都有自己的用户管理系统,现在想整合在一起,让他能进行统一登录,统一用户管理。我曾经考虑过用cas做统一登录。

但是有一点不明白,如果用cas的话,不是需要cas server端去读用户数据吗?我看可以使用jdbc去读取数据,这样是不是需要多个系统的用户数据都在同一张表呢?我对cas不熟悉,请大家帮忙解释解释。

另外使用cas进行统一登录,是不是都需要对用户进行统一管理?也就是说需要把各系统的用户数据统一到一张表进行管理?但如果各系统使用的是不一样的数据库,这样的情况怎么办?

 

 

今天看了一下cas的实现方案(Central Authentication Service)。发现它实际上也就是帮我们在多个系统之间共享了一下用户的登录名。
对于用户来说确实是减少了在多个系统之间重复输入用户名,密码的工作量。
但是对于程序开发者而言,除集中了一部分的用户帐号管理功能之外,还有什么其他的好处吗?

假如有ab两个系统,每个系统的用户表里除了最基本的登录名及密码之外还各自关联了一些其他的用户信息,并且还与
系统内部的其他表存在某种关联,例如生成报表时需要用到特定的用户属性等等。
那采用了单点登录方案之后,我还是要维护各自系统内部的用户数据,并且还要实现系统内部的用户数据与cas server
的用户数据同步(同步代价也不小吧)。就是说想做到用户的集中管理不是太现实的。

再说到用户的权限管理,每个系统对这个多系统之间的共享账户肯定是分配了不同的权限,应用系统拿到cas server返回的用户名之后还是要做当前系统的权限分配。

那多个系统之间进行界面(ui)级整合呢?我能设计一个通用的系统界面为所有的新老系统提供统一的用户管理,统
一的权限管理吗?

是不是可以这么说,对于单点登录这种系统整合方案,就是解决了少输入几次用户名,密码这个问题,到最后实际上到是增加了系统实现及整合的复杂度。

有什么好的解决方案可以将新老系统整合进一个通用的企业门户吗?

思路有点乱,写的也乱,大家有什么想法都交流一下吧。

 

 

其实我最后也明白了,不能想得太理想。
系统使用cas进行了整合,最后总了几点。

1
,单点登录仅仅帮助我们在各个子系统中间安全的共享了一下用户名,省去了用户重复登陆的麻烦,统一了用户帐户的管理,至于用户在每个系统中的权限分配,还是继续交 给子系统完成吧。可以开发一个cas server端的集成界面(portal),方便用户在各个子系统中间的快速切换。

2
,为了完善cas server的用户管理功能,需要在cas server,client端各自开放几个调用接口,保证子系统与cas server端的账户信息同步。

3
改造老系统时尽量为portal的集成开发新的访问入口(而不是去修改以前的代码使之兼容),这样既可以从集成portal访问,又可以从原有的访问地址访问。

 

 

Jdk1.6.0_14命令keytool用法

 

E:/javagood/cas-server-3.3.1>keytool

keytool 用法:

 

-certreq     [-v] [-protected]

             [-alias <别名>] [-sigalg <sigalg>]

             [-file <csr_file>] [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-changealias [-v] [-protected] -alias <别名> -destalias <目标别名>

             [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-delete      [-v] [-protected] -alias <别名>

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-exportcert  [-v] [-rfc] [-protected]

             [-alias <别名>] [-file <认证文件>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-genkeypair  [-v] [-protected]

             [-alias <别名>]

             [-keyalg <keyalg>] [-keysize <密钥大小>]

             [-sigalg <sigalg>] [-dname <dname>]

             [-validity <valDays>] [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-genseckey   [-v] [-protected]

             [-alias <别名>] [-keypass <密钥库口令>]

             [-keyalg <keyalg>] [-keysize <密钥大小>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-help

 

-importcert  [-v] [-noprompt] [-trustcacerts] [-protected]

             [-alias <别名>]

             [-file <认证文件>] [-keypass <密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-importkeystore [-v]

             [-srckeystore <源密钥库>] [-destkeystore <目标密钥库>]

             [-srcstoretype <源存储类型>] [-deststoretype <目标存储类型>]

             [-srcstorepass <源存储库口令>] [-deststorepass <目标存储库口令>]

             [-srcprotected] [-destprotected]

             [-srcprovidername <源提供方名称>]

             [-destprovidername <目标提供方名称>]

             [-srcalias <源别名> [-destalias <目标别名>]

               [-srckeypass <源密钥库口令>] [-destkeypass <目标密钥库口令>]]

             [-noprompt]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-keypasswd   [-v] [-alias <别名>]

             [-keypass <旧密钥库口令>] [-new <新密钥库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-list        [-v | -rfc] [-protected]

             [-alias <别名>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

-printcert   [-v] [-file <认证文件>]

 

-storepasswd [-v] [-new <新存储库口令>]

             [-keystore <密钥库>] [-storepass <存储库口令>]

             [-storetype <存储类型>] [-providername <名称>]

             [-providerclass <提供方类名称> [-providerarg <参数>]] ...

             [-providerpath <路径列表>]

 

E:/javagood/cas-server-3.3.1>

 

 

 

 

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值