`
liangjian103
  • 浏览: 173530 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CAS SSO 例子 笔记 (原创-梁健)

阅读更多

先说写心情一下:

    去年在第一家公司做的那个项目使用是CAS SSO单点登录,但是由于不是我做的那块,所以一直没有太深入的研究,这段日子比较闲,从新学习一下CAS SSO单点登录吧,门户网站等大型网站都会用的到的,所以这的确是个不可缺少的技术。这两天在配置CAS SSO的时候遇到了很多的问题,虽然有过无助,但坚持一下别放弃,最终总会弄成功的!

-------------------------------------------------------------------------------------------------------------------------------

列一列遇到问题的过程:

先是:Tomcat配置完https后,启动报错。

然后就是:正常启动,但是无法跳转到CAS登录页面,也无法以https访问。

再就是:可以正常跳转到CAS的登录页面,但点击登录后,跳转到成功页面的时候报500错误,说没有导入证书。

-------------------------------------------------------------------------------------------------------------------------------

网上找了好多的资料,但是几乎都配置不成功,不是缺这个就是少那个。这里我就写写我的笔记,绝对保证你能够配置成功!好了,心情就说到这吧,总之成功的那一刻心情是很爽的。

 

转载请注明出处:http://liangjian103.iteye.com/blog/1129056

 

需要介质
1、          客户端介质cas-client-2.0.11.zip

2、          服务端介质cas-server-3.4.8-release.zip

3、          Tomcat6.0

4、          jdk1.5.0_12

 

下载地址:

http://downloads.jasig.org/cas-clients/

http://downloads.jasig.org/cas/

 

将cas-server-3.4.8-release.zip\cas-server-3.4.8\modules下的cas-server-webapp-3.4.8.war拷贝到Tomcat的webapp目录下,重命名为cas.war

 

一、服务端配置(以下配置我已经写了批处理。):
修改Tomcat的密码为:changeit,因为下面统一都用的这个密码。

tomcat-users.xml
<user username="admin" password="changeit" roles="admin,manager"/>

 

由于CAS只能识别域名,所以只能修改C:\WINDOWS\system32\drivers\etc\hosts,加入:127.0.0.1       sso.tomcat.com
由于以下我使用批处理实现,也就不需要一步步的回车设置证书的信息了:
服务端凭证要配置域名 例如:CN=sso.tomcat.com 此处为hosts中配置的。这个名字要与下面配置客户端的web.xml中的过滤器里写到的一致,下面会再做解释。

set JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
set TOMCAT_HOME=D:\Program Files\Apache Software Foundation\Tomcat 6.0

set SERVER_DN="CN=sso.tomcat.com, OU=share, O=share, L=sz, S=gd, C=CN"
set KS_PASS=-storepass changeit

keytool -delete -alias tomcat -file client.cert %KS_PASS% -keystore server.keystore 
keytool -delete -alias tomcat1 -trustcacerts -file client.cert %KS_PASS% -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -keypass 

changeit

keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -dname %SERVER_DN% %KS_PASS% -keypass changeit
keytool -export -alias tomcat -file client.cert %KS_PASS% -keystore server.keystore 
keytool -import -alias tomcat1 -trustcacerts -file client.cert %KS_PASS% -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -keypass 

changeit  -noprompt

mkdir "%TOMCAT_HOME%\keystore\"
copy server.keystore "%TOMCAT_HOME%\keystore\"

@echo off 

echo "-----------------------------------------------------------"

echo 请配置%TOMCAT_HOME%\conf\server.xml文件。

echo "<Connector protocol=org.apache.coyote.http11.Http11NioProtocol"
echo           "port=8443 minSpareThreads=5 maxSpareThreads=75"
echo           "enableLookups=true disableUploadTimeout=true"
echo           "acceptCount=100  maxThreads=200"
echo           "scheme=https secure=true SSLEnabled=true"
echo	       "clientAuth=false sslProtocol=TLS"
echo           "keystoreFile=keystore/server.keystore keystorePass=changeit"
echo           "/>"

echo 当前JAVA_HOME=C:\Program Files\Java\jdk1.5.0_12
echo 当前TOMCAT_HOME=D:\Program Files\Apache Software Foundation\Tomcat 6.0
echo 证书位置:%TOMCAT_HOME%\keystore\server.keystore

echo 以上为CAS服务端的配置。接下来配置SSO客户端。

echo "-----------------------------------------------------------"
color 3
echo. && pause

 

保存为:生成证书配置.bat,双击执行。

修改Tomcat 6.0\conf\server.xml文件:

<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="keystore/server.keystore" keystorePass="changeit"
           />

 

这个配置也是困扰我好长时间,但最终测试通过了的。

这里需要注意,这个分别为证书的路径和密码,keystore/server.keystore这个目录和文件会在上面的批处理中创建,密码默认为:"changeit"

keystoreFile="keystore/server.keystore" keystorePass="changeit"

 

二、客户端配置:
在你的应用中,修改web.xml文件,加入SSO过滤器

	<!-- SSO-Start -->
	<filter>
		<filter-name>CAS Filter</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://sso.tomcat.com:8443/cas/login</param-value>
		</init-param>
		<init-param>
			<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
			<param-value>https://sso.tomcat.com:8443/cas/proxyValidate</param-value>
		</init-param>
		<init-param>
			<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
			<param-value>192.168.9.203:8080</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>CAS Filter</filter-name>
		<url-pattern>*.html</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>CAS Filter</filter-name>
		<url-pattern>*.htm</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>CAS Filter</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	<!-- SSO-END -->

 

 

启动Tomcat服务,访问一下你SSO过滤的页面便可以跳转到CAS的登录页面。登录成功后,会自动跳转到目标页面。如果A应用和B应用都加入了SSO过滤器,这样,他们就都会跳转到CAS认证服务器去登录,当其中一个应用在CAS上登录后,另一个应用则会自动登录。

 

 

分享到:
评论
12 楼 得牛哄哄 2013-07-15  
楼主,我想问题下,我服务器已经搭建好了,验证可以服务器登陆成功。客户端配置好后,同时启动服务器和客户端后,在地址栏输入,客户端应用的地址,但是无法进行服务器的验证界面,地址栏显示的地址为“https://localhost:8443/cas/login?service=https%3A%2F%2Flocalhost%3A8333%2Fcas_client_one%2F”。这是为何?求指导
11 楼 得牛哄哄 2013-07-15  
为什么下不了?
10 楼 aa00aa00 2013-06-21  
这个我已经配置成功了,看的视频,挺好的,其实用CAS确实挺方便的
9 楼 liangjian103 2012-01-06  
wangcgen 写道
你好,请教个问题,下载了你的sso包,找不到这个文件:casLoginView.jsp


注意:
需要介质
1、          客户端介质cas-client-2.0.11.zip

2、          服务端介质cas-server-3.4.8-release.zip

3、          Tomcat6.0

4、          jdk1.5.0_12

你是不是没下载cas-server啊,得配置好CAS服务,就是一个CAS的war包,你说的那个页面在CAS的war包里的。
8 楼 liangjian103 2012-01-06  
qxpidt 写道
lz,我部署已经成功了! 可是我如何迁移到项目里面呢,不知道这个如何来做呢?

在你要单点登录的web.xml里配置过滤器,就可以了,登录会到统一认证的服务器上做验证。主要是配置统一认证的服务器。
7 楼 qxpidt 2012-01-02  
lz,我部署已经成功了! 可是我如何迁移到项目里面呢,不知道这个如何来做呢?
6 楼 wangcgen 2011-12-31  
你好,请教个问题,下载了你的sso包,找不到这个文件:casLoginView.jsp
5 楼 liangjian103 2011-08-29  
在Linux下的配置:
将下列命令保存成sso.sh

keytool -genkey -alias tomcat -keyalg RSA -keystore server.keystore -dname "CN=sso.tomcat.com, OU=share, O=share, L=sz, S=gd, C=CN" -storepass changeit -keypass changeit
keytool -export -alias tomcat -file client.cert -storepass changeit -keystore server.keystore
keytool -import -alias tomcat1 -trustcacerts -file client.cert -storepass changeit -keystore /usr/java/jdk1.6.0_23/jre/lib/security/cacerts -keypass changeit -noprompt

mkdir /tomcat5/keystore/
cp server.keystore /tomcat5/keystore/

4 楼 liangjian103 2011-08-29  
补充:
Tomcat5.5的配置:
修改Tomcat5.5\conf\server.xml文件:
<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="keystore/server.keystore" keystorePass="changeit" />

----------------------------------------------------------------------------------

Tomcat6.0的配置:
修改Tomcat 6.0\conf\server.xml文件:

<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="keystore/server.keystore" keystorePass="changeit"
/>

----------------------------------------------------------------------------------
3 楼 denger 2011-07-25  
liangjian103 写道
其扩展性也没有 3.x 强
denger 写道
建立使用 cas-client-3.x ,2.x不支持单点登出。其扩展性也没有 3.x 强。

可是我用了3.x却找不到edu.yale.its.tp.cas.client.filter.CASFilter这个类呢。

类名换了而已~ 你可以去看看官方的 WIKI~
2 楼 liangjian103 2011-07-21  
其扩展性也没有 3.x 强
denger 写道
建立使用 cas-client-3.x ,2.x不支持单点登出。其扩展性也没有 3.x 强。

可是我用了3.x却找不到edu.yale.its.tp.cas.client.filter.CASFilter这个类呢。
1 楼 denger 2011-07-20  
建立使用 cas-client-3.x ,2.x不支持单点登出。其扩展性也没有 3.x 强。

相关推荐

Global site tag (gtag.js) - Google Analytics