实现CAS与AD在Linux下集成(修订)

来源:互联网 发布:最强围棋软件 编辑:程序博客网 时间:2024/05/18 00:46
        前段时间对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文件。
        用命令:
Java代码  收藏代码
  1. ktpass.exe /out myspnaccount.keytab /princ HTTP/your.server.name.here@YOUR.REALM.HERE /pass * /mapuser  
  2. myspnaccount@YOUR.REALM.HERE /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT /kvno 0  

        这里注意,your.server.name.here最好使用完整名,即name.domain name。
        还要注意 在后边加 /kvno 0 这样的参数 将生成的keytab文件变为0号版本(第一次生成的版本为3),这可能是cas的一个bug。
        生成好Keytab文件后,将文件拷到CAS服务器中。

        接下来要做CAS服务器中的配置:

                ☆在 /WEB-INF/login-webflow.xml文件中加入以下两段,要放在State “viewLoginForm”之前:
Java代码  收藏代码
  1. <action-state id="startAuthenticate">  
  2.   <evaluate expression="negociateSpnego" />  
  3.   <transition on="success" to="spnego" />  
  4. </action-state>  
  5.    
  6. <action-state id="spnego">  
  7.   <evaluate expression="spnego" />  
  8.   <transition on="success" to="sendTicketGrantingTicket" />  
  9.   <transition on="error" to="viewLoginForm" />  
  10. </action-state>  


                ☆将/WEB-INF/login-webflow.xml中的下面两个地方修改(与标准文档不同):
        decision-state gatewayRequestCheck中的generateLoginTicket 改为 startAuthenticate
        decision-state renewRequestCheck 中的generateLoginTicket 改为 startAuthenticate

                ☆/WEB-INF/cas-servlet.xml文件中加入以下内容:
Java代码  收藏代码
  1. <bean id="negociateSpnego" class="org.jasig.cas.support.spnego.web.flow.SpnegoNegociateCredentialsAction" />  
  2.    
  3. <bean id="spnego" class="org.jasig.cas.support.spnego.web.flow.SpnegoCredentialsAction">  
  4.     <property name="centralAuthenticationService" ref="centralAuthenticationService"/>  
  5. </bean>  


                ☆/WEB-INF/deployerConfigContext.xm文件中做以下修改:
        在credentialsToPrincipalResolvers下的list中加入
Java代码  收藏代码
  1. <bean class="org.jasig.cas.support.spnego.authentication.principal.SpnegoCredentialsToPrincipalResolver" />  

        在authenticationHandlers下的list中加入
Java代码  收藏代码
  1. <bean class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSSpnegoAuthenticationHandler">  
  2.     <property name="authentication">  
  3.       <bean class="jcifs.spnego.Authentication" />  
  4.     </property>  
  5.     <property name="principalWithDomainName" value="false" />  
  6.     <property name="NTLMallowed" value="true"/>  
  7.       </bean>  

        并注释掉原来的
Java代码  收藏代码
  1. <bean  
  2.                     class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  


                ☆在bean同级的位置加入以下内容:
Java代码  收藏代码
  1. <bean name="jcifsConfig" class="org.jasig.cas.support.spnego.authentication.handler.support.JCIFSConfig">  
  2.   <property name="jcifsServicePrincipal" value="HTTP/your.server.name.here@YOUR.REALM.HERE" />  
  3.   <property name="kerberosDebug" value="false" />  
  4.   <property name="kerberosRealm" value="YOUR.REALM.HERE" />  
  5.   <property name="kerberosKdc" value="THE.KDC.IP.HERE" />  
  6.   <property name="loginConf" value="/path/to/WEB-INF/login.conf" />  
  7. </bean>  

        注意:your.server.name.here要写全名 name.domain name。

                ☆/path/to/WEB-INF/下创建login.conf文件,内容如下:
Java代码  收藏代码
  1. jcifs.spnego.initiate {  
  2.    com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/home/cas/kerberos/myspnaccount.keytab";  
  3. };  
  4. jcifs.spnego.accept {  
  5.    com.sun.security.auth.module.Krb5LoginModule required storeKey=true useKeyTab=true keyTab="/home/cas/kerberos/myspnaccount.keytab";  
  6. };  

        注意:keyTab要写清楚keytab文件所在的路径。

        至此AD与CAS服务器的配置就完成了。但是现在仍然不可用,需要在客户机做一些配置(cas的配置这里就不说了,默认为cas配置成功的,应用系统已经接入,要从客户机访问应用系统)。

        客户机配置:
                ☆打开浏览器,找到Internet选项中的安全——本地Internet——站点——高级——,将CAS服务器的完整域名加入到信任站点。如:https://cas.domain name。
                ☆Internet选项中的高级,勾选中“集成身份验证(windows)”。
原创粉丝点击