实现CAS与AD在Linux下集成(修订)
前段时间对CAS的单点登录方案与AD域在Windows下的集成做了总结,但是由于该方案需要修改AD域中的加密类型,在企业中的域上使用便完全不通了。因为用作生产环境的域会有多台控制器相互复制,而复制过程需要加密,修改加密类型以后,会导致域控制器间无法复制,造成域的瘫痪。
所以在在不改域控制器的前提下,我只好尝试了用Linux搭建CAS服务器,如果路过朋友有在Windows下配置成功的经验,希望分享。
下面备忘一下我在Linux下的配置,参考文档就是CAS提供的标准文档,几乎没有改动,此处翻译过来供自己备忘,供大家参考。
链接:https://wiki.jasig.org/display/CASUM/SPNEGO
首先准备好最新版的CAS Server 与 Client 我使用的是3.4.11 Server 和 3.2.1 Client。
另外客户机、应用系统服务器,都要加入域,域用户要创建好。
然后所使用的Linux系统是R5,在上面装好JDK和Tomcat,JDK用最新版本吧,可以免去很多问题。
现在就开始配置了,首先完成AD域中所要做的工作:
☆生成一个Keytab文件。
用命令:
☆将/WEB-INF/login-webflow.xml中的下面两个地方修改(与标准文档不同):
decision-state gatewayRequestCheck中的generateLoginTicket 改为 startAuthenticate
decision-state renewRequestCheck 中的generateLoginTicket 改为 startAuthenticate
☆/WEB-INF/cas-servlet.xml文件中加入以下内容:
☆/WEB-INF/deployerConfigContext.xm文件中做以下修改:
在credentialsToPrincipalResolvers下的list中加入
在authenticationHandlers下的list中加入
并注释掉原来的
☆在bean同级的位置加入以下内容:
注意:your.server.name.here要写全名 name.domain name。
☆/path/to/WEB-INF/下创建login.conf文件,内容如下:jcifs.spnego.initiate { com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/home/cas/kerberos/myspnaccount.keytab";};jcifs.spnego.accept { com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/home/cas/kerberos/myspnaccount.keytab";};
注意:keyTab要写清楚keytab文件所在的路径。
至此AD与CAS服务器的配置就完成了。但是现在仍然不可用,需要在客户机做一些配置(cas的配置这里就不说了,默认为cas配置成功的,应用系统已经接入,要从客户机访问应用系统)。
客户机配置:
☆打开浏览器,找到Internet选项中的安全——本地Internet——站点——高级——,将CAS服务器的完整域名加入到信任站点。如:https://cas.domain name。
☆Internet选项中的高级,勾选中“集成身份验证(windows)”。
到这里为止,cas与ad域的集成就可用了,其他优化可以自行配置。祝顺利。