CAS 配置(基于tomcat 6)

来源:互联网 发布:淘宝大学诺思星 编辑:程序博客网 时间:2024/04/24 14:37

CAS 配置(基于tomcat 6

 

需要包资源:

a)        cas-server-3.3.5-release

b)        apache-tomcat-6.0.24-windows-x86.zip

c)        cas-client-2.0.11.zip ,后面我用了CAS-CLIENT-3.1.3版本,支持登出功能

 

第一步:配置CAS服务器环境

1,在企业内部网内该预备cas服务器主机中搜索hosts文本文件,添加域名映射对 ip  

  Lin(这里是我的主机名称,就是完整计算机名称,改下就可,不改就用localhost
2
,再客户主机中搜索hosts文本文件,添加相应cas服务器域名映射信息
3
,部署CAS3服务器端所需得ssl环境生成

预备生成文件: cacerts server.keystore client.keystore
    server.cer client.cer

生成服务器端库文件 (生成的时候,第一项name一定要写你的完整计算机名称,我的是lin)
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore

导出服务器端证书
keytool -export -alias tomcat-server -storepass changeit -file server.cer -keystore server.keystore
生成客户端库文件
keytool -genkey -alias tomcat-client -keyalg RSA -keypass changeit -storepass changeit -keystore client.keystore
导出客户端证书
keytool -export -alias tomcat-client -storepass changeit -file client.cer -keystore client.keystore

导入服务器端证书
keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit
导入客户端证书
keytool -import -trustcacerts -alias client -file client.cer -keystore cacerts -storepass changeit

4将如上生成得cacerts server.keystore client.keystore
    server.cer client.cer
文件分别拷贝到cas服务器以及应用客户端TOMCAT_HOME主目录以及JAVA_HOEM/jre/lib/security文件下(每个子系统的tomcat也要拷贝进去)

5 解压下载的CAS SERVER 包,找到/cas-server-3.3.5-release/cas-server-3.3.5/modules下的cas-server-webapp-3.3.5.war,更名为cas3.war,拷贝到TOMCAT webapp目录下,tomcat启动时,会自动解压。

 

配置好JDK1.6CMD命令JAVA –version 要是配置的JDK版本,否则没配置好),部署好TOMCAT

这里就不多说了,再来部署CAS SERVER

 

先配置服务端TOMCAT SSL: 主题:Tomcat SSL配置大全

       先解压一个TOMCAT6,我是到C/Program Files/目录下;进入tomcat目录的conf目录下,编辑server.xml,

找到(默认的端口号不用改)

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

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

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

去掉注释,这段段代码替换成:

       <Connector protocol="org.apache.coyote.http11.Http11NioProtocol"  

           port="8443" minSpareThreads="5" maxSpareThreads="75"  

           enableLookups="true" disableUploadTimeout="true"    

           acceptCount="100"  maxThreads="200"  

           scheme="https" secure="true" SSLEnabled="true"  

           clientAuth="false" sslProtocol="TLS"  

           keystoreFile="C:/Program Files/apache-tomcat-6.0.24/server.keystore"    

           keystorePass="changeit"/>  

运行:https://lin:8443/,出现tomcat的首页,则说明cas服务端配置成功。

主机名称和ip映射修改,找到C:/WINDOWS/SYSTEM32/DRIVERS/ECT/HOST 文件,增加

IP(主机IP hostname(主机名)

第二步:配置CAS客户端环境

再解压一个tomcat6,放在D盘,更名为casclient,这里因为在同一台电脑上,所以要更改端口号:

<Server port="8006" shutdown="SHUTDOWN">!—修改1 --

<Connector port="9090"

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

               enableLookups="false" redirectPort="8080" acceptCount="100"

               debug="0" connectionTimeout="20000"

               disableUploadTimeout="true" /> !—修改2 --

当然,证书文件都要拷贝到这个目录的根目录下。


再客户端应用程序得web.xml文件中加入如下:(CAS-CLIENT 2.0.11版本,当然下载后的cas-client-java-2.0.11包或者cas-client-java-3.0.0包也要解压,找到BIN下的CORE文件,拷贝到客户端系统的lib目录下)

 

 

------------------------------------客户端配置(1------------------------------------

<!-- CAS Filters -->
 <filter>
  <filter-name>CASFilter</filter-name>
  <filter-class>
   edu.yale.its.tp.cas.client.filter.CASFilter
  </filter-class>
  <init-param>
   <param-name>
    edu.yale.its.tp.cas.client.filter.loginUrl
   </param-name>
   <param-value>https://lin:8443/cas3/login</param-value>
  </init-param><!--
这里的server是服务端的
IP-->
  <init-param>
   <param-name>
    edu.yale.its.tp.cas.client.filter.validateUrl
   </param-name>
   <param-value>
    https://lin:8443/cas3/proxyValidate
   </param-value>
  </init-param><!--
这里的serName是服务端的主机名,而且必须是
-->
  <init-param>
   <param-name>
    edu.yale.its.tp.cas.client.filter.serverName
   </param-name>
   <param-value>lin:8080</param-value><!--client:port
就是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP
port-->
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>CASFilter</filter-name>
  <url-pattern>/secure/*</url-pattern><!--
这里的设置是针对servlets-examples的,针对jsp-examples设置为
/* -->
 </filter-mapping>

------------------------------配置(1)结束-------------------------------------------

-----------------------------------------以上的web.xml配置是客户端2.0.11版本,不支持登出功能---------------------------

 

-----------------------------------------下面的web.xml配置是客户端3.3.版本,支持登出功能-----------------------------------

 

<!-- CAS -->

    <!-- 单点登出 -->

      <filter>

        <filter-name>CAS Single Sign Out Filter</filter-name>

        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

    </filter>

     <filter-mapping>

        <filter-name>CAS Single Sign Out Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>   

    <listener>

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

    </listener> 

<!--单点登录 -->

<filter>

<filter-name>CAS Authentication Filter</filter-name>       

<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

        <!-- CAS login 服务地址-->

        <init-param>

            <param-name>casServerLoginUrl</param-name>

            <param-value>https://lin:8443/cas3/login</param-value>

        </init-param>

        <init-param>

            <param-name>renew</param-name>

            <param-value>false</param-value>

        </init-param>

        <init-param>

            <param-name>gateway</param-name>

            <param-value>false</param-value>

        </init-param>

        <!-- 客户端应用服务地址-->

        <init-param>

            <param-name>serverName</param-name>

            <param-value>http://lin:8999</param-value>

        </init-param>

</filter>

 

    <!--负责Ticket校验-->

<filter>

<filter-name>CAS Validation Filter</filter-name>        

<filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>

        <init-param>

            <param-name>casServerUrlPrefix</param-name>

            <!—下面一定要是主机名称(客户端主机要添加服务器主机名称与服务器的IP映射,在host文件中添加),其他的可以用IP(我遇到了这样的问题)casserver产生密钥的时候输入的"姓名(CN)",并且要有这个域名,或者hosts文件中要有定义 -->

            <param-value>https://lin:8443/cas3</param-value>

        </init-param>

        <init-param>

           <param-name>serverName</param-name>

           <param-value>http://lin:8999</param-value><!—这里写客户端的端口号 -->

       </init-param>

       <init-param>

           <param-name>useSession</param-name>

           <param-value>true</param-value>

       </init-param>

       <init-param>

           <param-name>redirectAfterValidation</param-name>

           <param-value>true</param-value>

       </init-param>       

</filter>

  

<filter>

    <filter-name>CAS HttpServletRequest WrapperFilter</filter-name>

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

</filter>

  

<filter>

    <filter-name>CAS Assertion Thread Local Filter</filter-name>

    <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>

</filter>

 

    <filter-mapping>

       <filter-name>CAS Authentication Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

  

    <filter-mapping>

        <filter-name>CAS Validation Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>  

  

    <filter-mapping>

        <filter-name>CAS HttpServletRequest WrapperFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

  

    <filter-mapping>

        <filter-name>CAS Assertion Thread Local Filter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

     <!-- END CAS -->

 

---------------------------------客户端配置(2)---------------------------------------

 

 

 

 

第三步:定制自己的身份登录密码

在服务端tomcat中,找到webapps/cas3/中的deployerConfigContext.xml,编辑:

 

找到

<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

这是CAS默认身份认证,只要用户名和密码相同就可以登录,注释掉<!-- à,定制自己的认证,替换成

  <!--下面是数据库配置-->

 

<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

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

                                 <property name="sql" value="select passwd from market.sys_phone_login@ncdata  where phone_id = ?" />

                                 <!--<property name="passwordEncoder"  ref="myPasswordEncoder"/> -->

                       </bean>

                     </list>

              </property>

       </bean>

<bean id="casDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

    <property name="driverClassName">

        <value>oracle.jdbc.driver.OracleDriver</value>

    </property>

    <property name="url">

        <value>jdbc:oracle:thin:@10.175.183.118:1521:info</value>

    </property>

    <property name="username">

        <value>prm</value>

    </property>

    <property name="password">

        <value>prm</value>

    </property>

</bean>

       <bean id="myPasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">

    <constructor-arg value="MD5"/>

</bean>

 

同时要把链接自己数据库的ORACLE JAR包资源等,放入项目的LIB目录下。

 

 

第四步:UI DIY设计

提示:获取用户信息

<%String user=(String)session.getAttribute("CASFilter.CAS_FILTER_USER");%>//2.0.11版本

    //HttpServletRequest request = ServletActionContext.getRequest();  

<%  AttributePrincipal principal = (AttributePrincipal)request.getUserPrincipal();  

    String username = principal.getName();   //3.3版本

    //Long orgnId = Long.parseLong(principal.getAttributes().get("orgnId").toString());

%>

 

 

遇到的问题:

1

由于cas的证书需要域名才能正确的进行认证信息的交互,不支持ip,如果serverclient在同一台机器上,可以使用localhost,如果像我们上面描述的三台服务器这样的环境,使用localhost或者ip是不能正常运行的。如果使用ip,运行时会抛出 HTTPS hostname wrong,如果客户端CAS过滤器没配好会返回no response 的错误。

解决的方法如下:

   假设server1ip为:192.168.10.1client1ip192.168.10.2,开发机器(xp)ip为:192.168.10.3

server1client1上设置本机的域名映射:

vi /etc/hosts 添加以下行

192.168.10.1 cas.server cas服务器所在的主机要加这个映射,同时客户机服务器主机要加上cas服务器名称和地址的映射,这很重要,不过这是针对HTTPS方式认证)

在开发机器(xp)下,在C:/WINDOWS/system32/drivers/etc目录下,编辑hosts文件,添加以下行

192.168.10.1 cas.server

 重新生成cas-sever的服务器端的证书,在开始问“你的名字”或“DName”的时候,必须填写你服务器所在域名(cas.server

然后重新到处服务器器端的证书,并将其导入到client1服务器的jvm

 最后修改servlets-examples/WEB-INF/web.xml中关于cas过滤器的配置:

请将your.cas.server.name(eg:server1)修改为cas.server即可。重新启动server1client1的服务器上的tomcat就可正常运行。

 ttp://client1:8080/servlets-examples/servlet/HelloWorldExample

系统会自动跳转到一个验证页面,随便输入一个相同的账号,密码,验证通过之后就会访问

到真正的HelloWorldExample这个servlet

2)取消cas服务器HTTPS认证,去除浏览器的警告,也就是用http认证(降低安全性)

 

Cas服务器用cas-server-3.3.1-release.zipcas客户端用cas-client-3.1.3-release.zip,他们的配置我就不说了,上面都有详细说明。

A.服务器端更改:

配置文件: $WebRoot/WEB-INF/sprint-configuration/ticketGrantingTicketCookieGenerator.xml  

  1. <bean id="ticketGrantingTicketCookieGenerator"    
  2.       class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"  
  3.         p:cookieSecure="true" <!-- 就是这东西在作怪,改成falseOK -->  
  4.         p:cookieMaxAge="-1" <!-- 这个不讨论 -->  
  5.         p:cookieName="CASTGC" <!-- 这个也不讨论 -->  
  6.         p:cookiePath="/cas" <!-- 这个有等于没有,为什么?看下面 -->  
  7. /> 

服务器修改完成。

 

B.客户端修改

还记得我们上面说的在客户端web.xmlcas服务器过滤器中,用到的是https://lin:8443/cas3/login之类的,现在我们要将这中服务端的连接改成:http://lin:8080/cas3/login这种方式,因为我们要用http来传递ST,注意cas服务器的http端口号我本机上是8080,这个看自己有没有改,如果改了这里也要改。(开始我就是这里没改成cas服务器的http端口,而只是把https改成http,一直报错,所以这是需要注意)

 

这个版本的cas客户端就修改完成,其他版本的修改麻烦……

原创粉丝点击