?
先说写心情一下:
去年在第一家公司做的那个项目使用是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上登录后,另一个应用则会自动登录。
----------------------------------------------------------
以下是本人总结的思路:
?
1、用户访问需要登录的页面时,跳转到登录域进行登录。
?
2、登录完毕后,带着登录成功的token(这个token可以是任何能唯一标识一个登录用户的东西,比如uuid,通过url参数传递,因为这样才能跨域)返回原来的页面。
?
3、原来的页面通过url取到这个token之后,去数据源中验证这个token是否合法,如果合法那么接下来跟普通登录一样设置cookie、session等各种登录状态就行了。
?
PS:附件是工程实例
?