一、教程说明前言
本教程环境:
二、创建证书啰嗦几句:证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;本教程由于是演示所以就自己用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,中文官方网站:http://www./cn/ 用JDK自带的keytool工具生成证书:<pre>keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey</pre> 无图不给力,有图有真相: 具体的输入项图片中都有说明,有一点我要解释一下;在输入完密码后提示输入域名是我输入的是sso.,其实这个域名是不存在的,但是我为了演示所以虚拟了这个域名,技巧在于修改 C:\Windows\System32\drivers\etc\hosts 添加内容如下: 127.0.0.1 sso. 这样在访问sso.的时候其实是访问的127.0.0.1也就是本机 严重提醒:提示输入域名的时候不能输入IP地址 三、导出证书D:\keys>keytool -export -file d:/keys/wsria.crt -alias wsria -keystore d:/keys/wsriakey 特别提示:如果提示: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect 那么请输入密码:changeit 来点颜色: 至此导出证书完成,可以分发给应用的JDK使用了,接下来讲解客户端的JVM怎么导入证书。 四、为客户端的JVM导入证书keytool -import -keystore D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security\cacerts -file D:/keys/wsria.crt -alias wsria 来点颜色瞧瞧: 特别说明D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security – 是jre的目录;密码还是刚刚输入的密码。至此证书的创建、导出、导入到客户端JVM都已完成,下面开始使用证书到Web服务器中,本教程使用tomcat。 五、应用证书到Web服务器-Tomcat说是应用起始做的事情就是启用Web服务器(Tomcat)的SSL,也就是HTTPS加密协议,为什么加密我就不用啰嗦了吧…… 准备好一个干净的tomcat,本教程使用的apache-tomcat-6.0.29 打开tomcat目录的conf/server.xml文件,开启83和87行的注释代码,并设置keystoreFile、keystorePass修改结果如下: 参数说明:
好了,到此Tomcat的SSL启用完成,现在你可以启动tomcat试一下了,例如本教程输入地址:https://sso.:8443/ 打开的是: 好的,那么我们点击“继续浏览此网站(不推荐)。现在进入Tomcat目录了吧,如果是那么你又向成功迈进了一步。 OK,接下来要配置CAS服务器了。 六、CAS服务器初体验
你成功了吗?如果没有成功请再检查以上步骤! 2011-11-05更新说明使用Maven构建:使用cmd或者shell进入cas-server-3.4.10目录,运行: mvn package -pl cas-server-webapp,cas-server-support-jdbc 意思是只需要构建cas-server-webapp和cas-server-support-jdbc,如果需要其他的请根据文件夹名称设置或者构建全部模块,打包全部模块命令:mvn package 即可。打包过程中会从网络下载需要的jar包,请耐心等待;如果在~/.m2/settings.xml中定义了mirror代理 打包完成后就可以从cas-server-webapp/target/cas.war复制到你的tomcat/webapp中;或者直接复制cas-server-webapp/target/cas-server-webapp-3.4.10目录到tomcat/webapp目录下,其他步骤和上面一样。 七、CAS服务器深入配置上面的初体验仅仅是简单的身份验证,实际应用中肯定是要读取数据库的数据,下面我们来进一步配置CAS服务器怎么读取数据库的信息进行身份验证。 首先打开<pre>tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml</pre> 配置的地方如下: 找到第92行处,注释掉:SimpleTestUsernamePasswordAuthenticationHandler这个验证Handler,这个是比较简单的,只是判断用户名和密码相同即可通过,这个肯定不能在实际应用中使用,弃用! 注释掉92行后在下面添加下面的代码: 在文件的末尾之前加入如下代码:
复制cas-server-3.4.3.1\modules\cas-server-support-jdbc-3.4.3.1.jar和mysql驱动jar包到tomcat/webapp/cas/WEB-INF/lib目录 配置解释:
create table t_admin_user ( id bigint not null auto_increment, email varchar(255), login_name varchar(255) not null unique, name varchar(255), password varchar(255), primary key (id) ) ENGINE=InnoDB;
八、配置CAS客户端添加cas-client的jar包,有两种方式: 传统型下载cas-client,地址:http://www./downloads/cas-clients/,然后解压cas-client-3.1.12.zip,在modules文件夹中有需要的jar包,请根据自己的项目情况选择使用 2011-11-05更新:用maven打包server的方式一样,在cas-client-3.2.1目录中运行命令: mvn package -pl cas-client-core -DskipTests=true 然后从target目录中复制cas-client-core-3.2.1.jar到应用的WEB-INF/lib目录中 Maven型
设置filter编辑web.xml,然后粘贴下面的代码:
每个Filter的功能我就不多说了,都有注释的,关键要解释一下AutoSetUserAdapterFilter的作用和原理. 查看完整的web.xml请 猛击这里 利用AutoSetUserAdapterFilter自动根据CAS信息设置Session的用户信息先看一下这个AutoSetUserAdapterFilter.java的源码 好的,如果你是老程序员应该很快就清楚Filter的目的,如果不太懂我再讲解一下; 主要是通过CAS的const_cas_assertion获取从CAS服务器登陆的用户名,然后再根据系统内部的用户工具(UserUtil.java)来判断是否已经登录过,如果没有登录根据登录名从数据库查询用户信息,最后使用设置把用户信息设置到当前session中。 这样就把用户信息保存到了Sessino中,我们就可以通过UserUtil工具来获取当前登录的用户了,我在实例项目中也加入了此功能演示,请看代码:main.jsp的第44行处 补充一下:如果是为一个老项目添加单点登录功能,那么基本不需要其他的修改,设置好上面的filter即可;当然最好获取用户信息的地方都调用一个工具类,统一管理不容易出错。 九、单点退出这个比较简单,把你的退出链接设置为:https://sso./cas/logout 即可。 十、美化CAS服务器界面CAS服务端(cas-server)的界面只能在测试的时候用一下,真正系统上线肯定需要定制开发自己的页面,就像网易和CSDN的统一认证平台一样,所有子系统的认证都通过此平台来转接,大家可以根据他们的页面自己定制出适合所属应用或者公司的界面;简单介绍一下吧,复制 cas\WEB-INF\view\jsp\default\ui的一些JSP文件,每一个文件的用途文件名已经区分了,自己修改了替换一下就可以了。 例如:
十一、结束语花了一下午时间终于写完了,总共十项也算完美了。 现在看来起始利用CAS实现单点登录其实不难,不要畏惧,更不要排斥! 本教程后面的代码部分均来自http://code.google.com/p/wsria的项目分支wsria-demo-sso 和本教程相关资料下载到此本教程全部结束,希望看完后对你有帮助,如果有帮助还望继续推荐给其他人,有说明意见或者问题请回复或者IM联系我。 十二、疑难问题如果遇到了意料之外的问题请参考文章的评论部分,或许能找到问题的原因以及解决办法! javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching casserver found由于创建证书的域名和在应用中配置的cas服务域名不一致导致以下错误,详细请参考: 十三、更新记录_2011-11-05整整一年之后因为需要为客户搭建CAS换季再次更新本文章,不知道碰巧呢碰巧呢还是碰巧呢,反正就是11.5号了…… 在这里还要感谢大家对我的支持,要不然这篇教程也不会一直处于本博客的第一位…… 不知道从哪个版本开始cas全面使用了maven构建项目,所以需要安装apache maven工具来构建源码,下面step by step讲解如何构建(面向没有接触过maven的童鞋)
在cmd或者shell中进入解压的cas server目录后运行:mvn -version后如果看到打印系统信息和maven版本信息后证明配置ok 十四、更新记录_2011-11-18你也可以申请免费的StartSSL CA证书: StartSSL(公司名:StartCom)也是一家CA机构,它的根证书很久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。 申请地址:http://www. 申请方法参考:http://www./Linux/2011-11/47478.htm |
|
来自: 关平藏书 > 《SSO(单点登录)》