环境:
tomcat7.05
cas-server-3.4.5
cas-client-3.2.0
CAS SERVER在开发阶段还算挺顺利,但在生产环境下就出现了一些问题了,大多是因为HTTPS引起的。因为开发环境中是单机,而生产环境下一般都是多机情况了尤其是使用单点登录的环境。
记得在之前使用SSL证书的时候CN是使用localhost的,而在生产环境下当然不能这样写了,而写什么呢?写IP的话是必须错的,只能写域名。但我在一个内网环境,没有DNS服务器。如果硬要写域名的话只能靠hosts映射了。
总结一下:
1、HTTPS是CAS SERVER的默认访问通道,由于考虑到安全性,数据都经过通过SSL通道加密传送。
2、使用HTTPS时,CA证书是必须的,而生成证书时的CN尤其重要,其他应用访问CAS SERVER的时候也受到CN所影响,若不匹配则会报异常。(所以localhost是不能使用的,因为其他应用访问时也必须受到https://证书CN/这样的访问限定)
3、若用内网中,没有DNS服务器,只能靠host作CN的域名映射。每台应用系统的hosts都必须增加CN的域名和IP映射条目。
4、默认情况下不信任的授权机构生成的CA证书必然引起浏览器提示。
所以说这个安全性会带来不少的工作量,特别是内网和拿不到正规证书的情况。若一般的应用安全性要求不高的话,也许会考虑取消掉这种HTTPS验证方式。
如何去掉HTTPS认证?
说明:
默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果。所以必须作出下面的修改
在cas-server-3.4.5版本中修改认证方式还算挺简单的,基本不用修改源码。
1、进入WEB-INF\spring-configuration目录
打开warnCookieGenerator.xml文件
修改p:cookieSecure的值为false
2、打开ticketGrantingTicketCookieGenerator.xml文件
同样修改p:cookieSecure的值为false
3、打开WEB-INF\deployerConfigContext.xml文件
查找org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler
把这代码块修改为如下:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient"
p:requireSecure="false"
这样就大功告成了