cas服务器配置 windows

来源:互联网 发布:十大高薪职业知乎 编辑:程序博客网 时间:2024/05/17 07:09

目的:使用单点登录系统统一管理各子系统的用户登录登出,并提供一个统一的集成页面,方便用户在各系统之间的快速切换。

环境:cas-server-3.3.1,cas-client-2.0.11

一:为Tomcat配置SSL安全协议

1.1创建自我签名的证书

SUN公司提供了制作证书的工具keytool。在JDK1.4以上版本中都包含了这一工具。通过这个工具生成证书的命令为:

keytool-genkey -alias tomcat -keyalg RSA -validity 365

以上命令将生成包含一对非对称密钥和自我签名的证书,这个命令中参数的意思

-genkey:生成一对非对称密钥。

-alias:指定密钥对的别名,该别名是公开的。

-keyalg:指定加密算法,此处采用通用的RSA算法。

以上命令将在操作系统的用户目录下生成名为”.keystore”的文件。

如果希望生成的keystore文件放在其他目录中,可以使用-keystore参数

keytool-genkey -alias tomcat -keyalg RSA -keystore d:\.keystore

1.2 keytool -export -alias tomcat -keystore tomcat -file tomcat.crt 这一步是把密钥库导出为证书文件。 注意:密码为上一步设定的密码。  
1.3keytool -import -alias tomcat -file tomcat.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" 
这一步是把证书导入TOMCAT。

 后面的路径为TOMCAT使用的JRE路径,JDK1.6安装有两个目录JDK1.6和JRE1.6,TOMCAT6.0只要JRE1.6即可,通常在安装时,也都是默认到JRE1.6,这时要输入%JRE_HOME%/lib/security/cacerts,这个地方必须要确认准确。注意:这里需要输入密码,此密码不是前面设定的密码,是系统默认的密码changeit    
 

2.使用keytool的注意事项

1. 默认情况下.keystore文件存放在 [用户目录下]

2. 在执行keytool命令式可以使用-keystore参数指定.keystore文件的生成目录

3. 名字与姓名要输入主机名或者域名,如so.example.com或者localhost.密码默认为changeit,下面的密码直接按回车即可

3.Tomcat 配置 ssl 连接器

1. 在Tomcat的【catalina_path】\conf\server.xml文件中,已经提供了现成的配置SSL连接器的代码,只要把注释去掉即可

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

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

              clientAuth="false" sslProtocol="TLS" />

2.Connector其他属性:

keystoreFile:指定keystore文件的存放位置,可以指定绝对路经。如果此项没有设定,在默认情况下,Tomcat将从当前操作系统用户的用户名目录下读取名为”.keystore”的文件

keystorePass:指定keystore的密码,如果此项没有设定,在默认情况下,Tomcat将使用”changeit”密码。

3.使用SSL协议访问Tomcat .在浏览器中中输入https://localhost:8443/


二:部署CAS Server

CAS Server 是一个 Web 应用包,将前面下载的 cas-server-3.1.1-release.zip 解开,把其中的 cas-server-webapp-3.1.1.war 拷贝到 tomcat的 webapps 目录,并更名为 cas.war。由于前面已配置好 tomcat 的 https 协议,可以重新启动 tomcat,然后访问:https://localhost:8443/cas ,如果能出现正常的 CAS 登录页面,则说明 CAS Server 已经部署成功。

.cas配置mysql

对于CAS Server的cas.war中默认的认证Handler是SimpleTestUsernamePasswordAuthenticationHandler,该方式只要输入的用户名和密码相同就能通过验证,因此需要更改设置,常见的有数据库,xml文件,ldap方式。下面讲述数据库和ldap两种方式。

在CAS Server中webapp下的cas中配置文件deployerConfigContext.xml,把上述的简单认证注释掉,在其下面加入数据库handler,如下:

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
    <property name="sql" value="select password from app_user where username=?" />

      <property name="dataSource" ref="dataSource" />

  <property name="passwordEncoder" ref="passwordEncoder"/> <!--当数据库采用MD5加密方式的时候需要添加这一句-->

</bean>

</bean>

上述配置还是用到了dataSource和passwordEncoder,因此需要加入以下配置,位置只要在<beans>下就行:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost:3306/cas3</value></property>
        <property name="username"><value>root</value></property>
         <property name="password"><value>1234</value></property>
 </bean>   

如果数据库中的密码采取MD5散列的话,加入passwordEncoder属性

<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
     <constructor-arg index="0">
         <value>MD5</value>
     </constructor-arg>

</bean> 

然后在cas中的webapp下lib的库加入,数据库连接驱动和包支持,mysql-connector-java-5.1.18-bin.jar和cas-server-support-jdbc-3.5.1.jar。

对于我的程序来说,访问测试web应用http://qinshang-PC:8443/cas-sql/login 然后输入数据库中的密码就可以正常查看了

CAS返回附加属性给客户端

1:修改attributeRepository属性,注释掉原本的这个bean,重新定义如下的bean:

    <bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
        <constructor-arg index="0" ref="dataSource" />
        <constructor-arg index="1" value="SELECT * FROM app_user WHERE {0}" />
        <property name="queryAttributeMapping">
            <map>
                <entry key="username" value="username" />
            </map>
        </property>
        <property name="resultAttributeMapping">
            <map>
                <entry key="username" value="username" />
                <entry key="company" value="company" />
                <entry key="email" value="email" />
            </map>
        </property>
    </bean>

2:修改名称为serviceRegistryDao的bean,在list中选择针对自己选择的方式添加属性,我这里选择的是http://**类型,然后添加了需要额外查询的属性名

<property name="allowedAttributes">
      <list>
            <value>company</value>
            <value>email</value>
      </list>
 </property>

PS:网上有很多博客说是要注释掉这个bean下的属性,不然客户端还是接收不到附加属性,但是我这样尝试后,发现连cas的认证界面都登入不上去,这里真心感谢http://01jiangwei01.iteye.com/blog/1434200该篇博客的指导,不然我估计我再照以前那方法花个三天还是配不好这个问题!

3:修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件,增加以下代码,不然客户端还是会接收不到附加属性:

<c:if
   test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
   <cas:attributes>
    <c:forEach 
var="attr"
     items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"
     varStatus="loopStatus" 
begin="0"
     end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"
     step="1">
     <cas: ${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas: ${fn:escapeXml(attr.key)}>
    </c:forEach>
   </cas:attributes>
  </c:if>

好了,大功告成,打开浏览器,测试一下吧!


.cas配置ldap

对于LDAP来讲,同样是改变deployerConfigContext.xml,加入LDAP的handler,如下:

<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler">    
     <property name="filter" value="uid=%u" />    
     <!-- 基节点 -->  
     <property name="searchBase" value="ou=accounts,dc=lab,dc=kernelogic,dc=ca" />    
     <property  name="contextSource" ref="contextSource" />    
</bean>   

还要在其他位置加入contextSource的配置:

  <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="anonymousReadOnly" value="false" />   
    <property name="pooled" value="true" />  
    <property name="urls">  
        <list>  
           <value>ldap://lab.kernelogic.ca/</value>   
        </list>  
    </property>  
    <!-- 如果是老版本,这里应该用的是userName,而不是userDn -->   
    <property name="userDn" value="cn=admin,dc=lab,dc=kernelogic,dc=ca" />  
        <property name="password" value="secret" /> 
    <property name="baseEnvironmentProperties">  
        <map>  
          <entry>    
            <!--none 端口 389-->      
            <!--ssl 端口 636-->                       
            <key><value>java.naming.security.protocol</value></key>    
            <value>none</value>    
          </entry>    
          <entry>                       
            <key><value>java.naming.security.authentication</value></key>         
            <value>simple</value>  
          </entry>  
        </map>  
    </property>
</bean> 

  然后在cas 库中加入cas-server-support-ldap-3.5.1.jar ,spring-ldap的jar文件,应该就可以了,因为这个例子没有测试,所以先写在这儿,测试后如果有错误会更改!





原创粉丝点击