在Tomcat上配置CAS 自己的体验

演示环境

本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下:

  • windows732位
  • JDK 1.6.0_18
  • Tomcat 6.0.29
  • CAS-server-3.4.11、CAS-client-3.2.1

根据演示需求,用修改hosts 文件的方法添加域名,在文件 C:WindowsSystem32driversetchosts 文件中添加三条

127.0.0.1    localhost1

127.0.0.1    localhost2

127.0.0.1    sunhan(这个在生成证书的时候用的上,由于一开始不知道就随便写了,后来才知道这个地方后面要用的到)

sunhan  =>>对应部署cas server的tomcat,这个虚拟域名还用于证书生成

localhost1 =>>  对应部署app1的tomcat

localhost2   =>>对应部署app2的tomcat

 

生成证书

在C盘根目录下建立子文件夹“Keys”,用于存放证书。

单击“开始 -> 运行",输入“cmd”,单击“确定”启动命令提示符窗口。

输入“cd "c:Program FilesJavajre7in"”进入jre7的bin目录下。

执行命令“keytool -genkey -alias tomcat -keyalg RSA -storepass changeit -keystore F:SSOkeys.keystore -validity 3600”创建证书。如图:

image

注:1.要提前建好目录:F:SSOkeys

2.changeit 就是你要的密码,在后续的配置文件中会用到这个。

3.sunhan 此处就是当作服务器端域名

image

将证书导入的JDK的证书信任库中

第一步:导出证书。

执行命令“keytool -export -trustcacerts -alias tomcat -file F:SSOkeys omcat.cer -keystore F:SSOkeys.keystore -storepass changeit”将证书导出到Keys文件夹。

第二步:将证书导入到JDK证书信任库。

执行命令“keytool -import -trustcacerts -alias tomcat -file F:SSOkeys omcat.cer -keystore "C:Program FilesJavajre7libsecuritycacerts" -storepass changeit”。系统询问是否信任此证书,回答“y”。

image

注:想我,可能测试两边的,他会提示证书已经存在,请用下面第二个方法进行证书删除

其他有用keytool命令(列出信任证书库中所有已有证书,删除库中某个证书):

keytool -list -v -keystore "C:Program FilesJavajre7libsecuritycacerts"

keytool -delete -trustcacerts -alias tomcat -keystore "C:Program FilesJavajre7libsecuritycacerts" -storepass changeit

配置server.xml文件

以管理员身份运行文字编辑器,打开%TOMCAT_HOME%confserver.xml。查找SSL配置并将如下内容插入其中。

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               clientAuth="false" sslProtocol="TLS" 
               keystoreFile="F:/SSO/keys/.keystore" 
               keystorePass="changeit" />

 

然后启动该路径下的tomcat ,分别测试“http://demo:8080”和“https://demo:8443/”

image

 

安装 CAS

解压缩下载下来的“cas-server-3.5.1-release.zip”,

在“modules”文件夹中找到“cas-server-webapp-3.5.1.war”,将其重命名为“cas.war”

将“cas.war”拷贝到“%TOMCAT_HOME%webapps”(这里要注意一下,我是没有设置这个环境变量的,为了测试SSO,用的新建的tomcat的)文件夹下。稍等一会儿刷新一下,就会看到Tomcat自动将“cas.war”解压到“cas”文件夹中。如下图:

image

测试 CAS

在默认配置下,CAS认为只要用户名密码相同即登录成功。我们可以通过修改配置以实现基于数据库的身份验证。不过目前我们先以默认配置进行测试。

在浏览器中输入网址“https://demo:8443/cas/login”,如果IE有证书警告信息,直接点击“继续浏览此网站(不推荐)。

image

如果用户名与密码相同,则系统显示登录成功:

image

部署CAS-Client相关的Tomcat

Cas-Client下载

CAS-Client下载地址:http://downloads.jasig.org/cas-clients/

以cas-client-3.2.1-release.zip为例,解压提取cas-client-3.2.1/modules/cas-client-core-3.2.1.jar

借以tomcat默认自带的webappsexamples 作为演示的简单web项目

安装配置tomcat-app1

解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为F:SSO omcat1,修改tomcat的启动端口(共计5处),在文件conf/server.xml文件找到如下内容:

<Serverport="8005" shutdown="SHUTDOWN">

<Connectorport="8080" protocol="HTTP/1.1"

  connectionTimeout="20000"

  redirectPort="8443" />

<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />

修改成如下:

<Serverport="18005" shutdown="SHUTDOWN">

<Connectorport="18080" protocol="HTTP/1.1"

  connectionTimeout="20000"

  redirectPort="18443" />

<Connectorport="18009" protocol="AJP/1.3"redirectPort="18443" />

启动tomcat1,浏览器输入http://localhost1:18080/examples/servlets/回车:

接下来复制client的lib包cas-client-core-3.2.1.jar和commons-logging-1.1.jar到 tomcat1webappsexamplesWEB-INFlib目录下,在tomcat1webappsexamplesWEB-INFweb.xml 文件中增加如下内容:

    <!-- ======================== 单点登录开始 ======================== -->
    <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
    <listener>
        <listener-class>org.jasig.cas.cl"F:/SSO/tomcat1/webapps/examples/WEB-INF/web.xml"ient.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <!-- 该过滤器用于实现单点登出功能,可选配置。 -->
    <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>

    <!-- 该过滤器负责用户的认证工作,必须启用它 -->
    <filter>
        <filter-name>CASFilter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://localhost:8443/cas/login</param-value>
            <!--这里的server是服务端的IP -->
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>https://localhost:8443</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CASFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 该过滤器负责对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>
            <param-value>https://localhost:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>https://localhost:8443</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
    <filter>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <filter-class>
            org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->
    <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 Assertion Thread Local Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    
    <!-- ======================== 单点登录结束 ======================== -->

有关cas-client的web.xml修改的详细说明见官网介绍:

https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml

同样的方式部署一个tomcat2

七、 测试验证SSO

启动之前配置好的三个tomcat分别为:tomcat-cas、tomcat-app1、tomcat-app2.

7.1 基本的测试

预期流程:打开app1 url —->跳转cas server验证 —->显示app1的应用 —->打开app2 url —->显示app2应用 —->注销cas server —->打开app1/app2url —->重新跳转到cas server验证.

打开浏览器地址栏中输入:http://localhost:18080/examples/servlets/servlet/HelloWorldExample

这里要注意一点:服务器端的jdk 和 客户端的jdk要指定不同的

本文所有知识都是通过一下博客获取。再次感谢他

http://www.micmiu.com/lang/java/keytool-start-guide/

原文地址:https://www.cnblogs.com/sunhan/p/3808011.html