Yale CAS Server的部署及cas-java-client 3.2的应用

环境:
[url=http://tomcat.apache.org/download-70.cgi]tomcat7.05[/url]
[url=http://www.jasig.org/cas/download]cas-server-3.4.5[/url]
[url=http://www.ja-sig.org/downloads/cas-clients/]cas-client-3.2.0[/url]

一 . 证书实践

1.生成keystore
keytool -genkey -alias cas -keypass changeit -storepass changeit -keyalg RSA -validity 3600 -dname "CN=[color=red]localhost[/color], OU=KENNY, O=KENNY" -keystore cas.keystore

[b]注意CN的填写,必须是访问的域名。因为是SSL,所以对域名要求比较严格。
[/b]

2.查看当前JRE的keystore,输出到t.txt中
keytool -list -v -keystore %java_home%/jre/lib/security/cacerts > t.txt

3.删除证书
keytool -delete -alias cas -keystore %java_home%/jre/lib/security/cacerts -keypass changeit

4.导出crt
keytool -export -alias cas -keypass changeit -file cas.crt -keystore cas.keystore

5.导入证书到JRE
keytool -import -alias cas -file cas.crt -keypass changeit -keystore %java_home%/jre/lib/security/cacerts

再提醒一次:
①.生成数字证书的时候必须使用主机名或者域名作为证书名称(CN),
例如sso.example.com(CN=sso.example.com, OU=example, O=example, L=beijing, ST=beijing, C=china)
②.检查JAVA_HOME环境变量(echo $JAVA_HOME),确认tomcat使用了那一个jre(有时候一台机器上会有多个jre),需要将生成的证书文件导入至web服务器使用的那个jre的信任证书列表中,可以使用keytool -list命令检查证书是否导入成功。

二.配置tomcat使用HTTPS

把cas.keystore文件放到tomcat的conf目录下

然后打开tomcat目录下 conf/server.xml文件

查找
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
默认这一段是注释的,去掉注释符号然后修改为以下

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" keystorePass="changeit" keystoreFile="conf/cas.keystore"
maxThreads="150" scheme="https" secure="true"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100"
clientAuth="false" sslProtocol="TLS" />


启动tomcat,访问 https://localhost:8443/ 测试是否正常。

[b]勿忘把证书导入到JRE当中,参考第一点的说明。
[/b]

三.部署CAS-Server

解压CAS-server包
拷贝 modules/cas-server-webapp-VERSION.war 到tomcat下的webapps目录
若tomcat已启动会自动解压部署

访问
http://localhost:8080/cas-server/login 测试是否正常,同样可以使用https

四.测试CAS-Client,集成子系统

同样,这个跟网上的一些例子一样。拿tomcat webapps目录下的examples为子系统做例子。

原理很简单,examples项目原来不用登陆的,现在需加上统一验证。最简单的方法当然就是加一个filter,跟普遍应用中的权限功能差不多,并且耦合度低。所有请求都拦截下来先去filter里面处理验证权限信息,若原系统已经有权限系统的话,做的就是跟CAS-SERVER交互后获取子系统中客户端账号的权限到上下文中。

首先把cas-client-core.jar导入项目的lib中,其中记得把依赖包jakarta commos-logging.jar一并导入。

打开web.xml

添加如下filter的配置
<!-- CAS configure Begin -->
<filter>
<filter-name>CasSingleSignOutFilter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>

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

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

<filter>
<filter-name>CasAuthenticationFilter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://localhost:8443/cas-server/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://localhost:8443</param-value>
</init-param>
<init-param>
<param-name>renew</param-name>
<param-value>false</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>CasAuthenticationFilter</filter-name>
<!-- 过滤器保护的URL,如果能访问这个保护的URL,表示经过CAS验证,可以做获取权限的操作。-->
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>CasValidationFilter</filter-name>
<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value>https://localhost:8443/cas-server/</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://localhost:8443</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>true</param-value>
</init-param>
</filter>

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

<filter>
<filter-name>CasHttpServletRequestWrapperFilter</filter-name>
<filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
</filter>

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

<!-- CAS configure End -->


其中注意红色的域名,由于证书生成的时的域名不同,将影响到这里跳转登录是否能访问子系统。

后记:
1、发生了不少次"No subject alternative names present"的问题。几个月前试过把client源码中触发的代码改掉,暂时不进行验证,因为想着调试的关系才出现的问题,现在想起都好笑。经测试后发现创建证书时,域名用127.0.0.1是不行的,就算web.xml里面匹配了127.0.0.1同样报错,而用localhost的话就正常。

2、CAS filter的配置改动比较大,之前学的和网上大多例子都沿用2.1版本的client及server,还一大堆写着edu.yale的classes。就连官网的wiki也一样是2.1版本的demo,还好依葫芦画瓢看到官网上有其他新的3.1配置参考。


附件说明:
web.rar为tomcat中examples项目中的web.xml文件,加入了CAS filter。
server.rar为tomcat/conf目录下的server.xml文件,参考配置SSL。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值