单点登录(SSO)
好久没发表什么文章了,也不是不发,是没研究什么东西。最近在做一个门户项目,要用到单点登录这个功能,所以就开始研究起了单点登录,开源的框架也挺多的,但是好像也都不怎么适用,网上关于单点登录的资料又少的可怜。最后跟领导商议用耶鲁大学的开源框架CAS进行研究及开发。下面在研究过程中一些笔记,有些也是在网上找到的。都是按照这个流程走下来的,在中途遇到好多莫名其妙的问题,有些事解决了,但是还有些小问题没能彻底解决,但是能跑的动,如果大家有兴趣的话,可以一起讨论。
下面为具体的流程
单点登录
SSO是目前比较流行的企业业务整合的解决方案之一,它定义在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS 是Yale(耶鲁)大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,在2004年12月正式成为JA-SIG的一个项目。目前,也已经有许多应用CAS实现单点登录的成功案例。
一、下载所需软件
CAS Server:http://www.jasig.org/cas/download
CAS Client:http://downloads.jasig.org/cas-clients/
本文下载的版本是:
cas-server-3.4.11-release.zip
cas-client-3.2.1-release.zip
二、配置过程
1、Tomcat
本文将配置一个单独的Tomcat环境将CAS用,因为原有的Tomcat可能要用于其它项目的开发,就不想在原有上面的Tomcat开刀了。
下载apache-tomcat-6.0.30-windows-x64.zip,解压到C盘,并命名为:Tomcat6_CAS
因为要存在多个Tomcat,所以新建环境变量:
CATALINA_HOME_CAS=C:\Tomcat6_CAS
CATALINA_BASE_CAS=C:\Tomcat6_CAS
然后修改Tomcat下所有指向CATALINA_HOME和CATALINA_BASE,可以用DW一次性打开C:\Tomcat6_CAS\bin下面的所有.bat文件,然后利用查找替换功能一次搞定。
修改Tomcat6_CAS的http访问端口为80端口(因为到时要用域名访问,需要修改hosts,而hosts不支持端口号),打开conf/server.xml,修改成:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
启动Tomcat,访问http://127.0.0.1 看看能不能打开。
映射域名(此处使用gevin.me作为例子),修改C:\Windows\System32\drivers\etc\hosts文件,增加以下记录:
127.0.0.1 sso.gevin.me (这个是域名,在生成证书的时候根据自己的情况,填写自己的域名,什么都可以)
访问http://sso.gevin.me,看看能不能访问,如图:
要实现CAS SSO,必须让Tomcat支持SSL,下面将讲一下如何配置SSL。
本文使用的Tomcat版本是:apache-tomcat-6.0.30-windows-x64.zip
一、生成Key Store
1 C:\Java\jdk1.6.0_27\bin>keytool -genkey -alias "tomcat" -keyalg "RSA" -keystore "C:\Tomcat6_CAS\keystore\gevinme.keystore" -validity 360
注意:第一个问一定要填写cas server的域名,否则到时访问客户端程序时将会报以下的错误:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching xxx.xxx.xx found
参数介绍:
-alias 密钥的别名
-keyalg 密钥使用的加密算法,此处使用RSA
-keystore 密钥存储的位置,默认是存在用户主目录下,此处则指定存储位置
-validity 密钥的有效期
更多关于keytool的参数说明请参考《JDK keytool参数说明》
keystore的密码我设置为gevinme,与Tomcat的管理员密码一样,tomcat-user.xml额外增加了以下权限:
<tomcat-users>
<user username="admin" password="gevinme" roles="admin,manager"/>
</tomcat-users>
执行完上述命令后,将会在指定的目录下生成gevinme.keystore文件,如图:
二、配置SSL连接器
修改Tomcat\conf\server.xml文件
将以下的内容的注释去掉,并增加以下密钥位置和密码:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="C:\Tomcat6_CAS\keystore\gevinme.keystore"
keystorePass="gevinme"
/> 此时启动后会报以下错误:
1 java.lang.exception connector attribute sslcertificatefile must be defined when using ssl with apr
只需要将conf\server.xml里面的以下内容注释掉即可:
<!--
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
-->
三、测试访问:
启动Tomcat,访问https://127.0.0.1:8443
点击“证书错误”后,可以查看到我们刚刚生成的密钥的相关信息:
至此,Tomcat的SSL配置过程已完成,下面将介绍如何导出证书和客户端如何导入服务器端生成的证书,为之后的SSO做准备。
四、导出证书
1 C:\Java\jdk1.6.0_27\bin>keytool -export -alias tomcat -file "C:\Tomcat6_CAS\keystore\gevinme.cert" -keystore "C:\Tomcat6_CAS\keystore\gevinme.keystore"
五、客户端导入证书
在运行客户端程序的机器上导入证书,需要注意的是此入导入的jre必须是Tomcat指向的jre。(本文在同一台机器上测试)
1 C:\Java\jdk1.6.0_27\bin>keytool -import -alias tomcat_client -trustcacerts -file "C:\Tomcat6_CAS\keystore\gevinme.cert" -keystore "C:\Java\jre6\lib\security\cacerts"
如果看到这个图显示的东西时,说明你的证书已经生成,并且把证书已经导入到客户端。
未完有时间再续~~~~
猜你喜欢
转载自lwazl1314.iteye.com/blog/1652650
今日推荐
周排行