前言
这一段时间,心血来潮研究了下CAS这个应用。对它感兴趣,几年前就有过,就是一直没有踏实好好研究,一直是断断续续的纸上谈兵,东看看,西看看。CAS说白了主要涉及权限认证相关,逻辑非常简单。但真正部署起来,也不是一件容易事。我想主要原因如下。
由于知名原因,访问官网非常有难度,系统全面地获取资料非常难,且中文资料更少
国内虽然已经有很多博客论坛已经分享了很多部署步骤和认证流程,但一步步真正演练起来,非常困难,对遇到的异常提到的很少。一些必要的参数,根本不提。让后来者多走了很多弯路。何况,博客年代大多是年代久远了。
个人成功部署起来一套完整的应用,包括CAS普通模式,CAS 代理模式。竟然花了5个晚上,(1)部分原因是网上资源不靠谱。(2)涉及maven解决jar依赖关系耗时耗力,恶心。(3)想搜索遇到的异常解决方案,根本没有文章提到。
个人想把自己辛苦5个晚上的经历和异常分享出来,希望和大家一起成长,大家少走弯路。本博客的重点是技术不走层面,理论讲解相关的放到次要位置,但也不是不提。
准备工作
先需要了解相关的概念。
SSO(单点登录)
CAS
HTTPS
COOKIE,SESSION
安全证书
加密解密等
环境参数
涉及的所有参数都在我的实体机(WIN7)完成的。分别按照了3个TOMCAT服务端。
域名映射(C:\Windows\System32\drivers\etc\hosts)
127.0.0.1 hellocas1.com 127.0.0.1 hellocas2.com
主机名
zhaoguoyu-pc
主要内容
创建证书
部署CAS服务器
创建证书
使用java keytool证书工具(官方例子)
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\ukari>cd \program* The filename, directory name, or volume label syntax is incorrect. C:\Program Files>cd java C:\Program Files\Java>cd jdk* C:\Program Files\Java\jdk1.5.0_11>cd bin C:\Program Files\Java\jdk1.5.0_11\bin>keytool -genkey -alias tomcat -keypass changeit -keyalg RSA Enter keystore password: changeit What is your first and last name? [Unknown]: compA What is the name of your organizational unit? [Unknown]: Information Systems What is the name of your organization? [Unknown]: Pacific Disaster Center What is the name of your City or Locality? [Unknown]: Kihei What is the name of your State or Province? [Unknown]: HI What is the two-letter country code for this unit? [Unknown]: US Is CN=compA, OU=Information Systems, O=Pacific Disaster Center, L=Kihei, ST=HI, C=US correct? [no]: yes C:\Program Files\Java\jdk1.5.0_11\bin>keytool -export -alias tomcat -keypass changeit -file server.crt Enter keystore password: changeit Certificate stored in file <server.crt> C:\Program Files\Java\jdk1.5.0_11\bin>keytool -import -file server.crt -keypass changeit -keystore ..\jre\lib\security\cacerts Enter keystore password: changeit Owner: CN=compA, OU=Information Systems, O=Pacific Disaster Center, L=Kihei, ST=HI, C=US Issuer: CN=compA, OU=Information Systems, O=Pacific Disaster Center, L=Kihei, ST=HI, C=US Serial number: 462030d8 Valid from: Fri Apr 13 15:39:36 HST 2007 until: Thu Jul 12 15:39:36 HST 2007 Certificate fingerprints: MD5: CC:3B:FB:FB:AE:12:AD:FB:3E:D 5:98:CB:2E:3B:0A:AD SHA1: A1:16:80:68:39:C7:58:EA:2F:48:59:AA:1D:73:5F:56:78:CE:A4:CE Trust this certificate? [no]: yes Certificate was added to keystore C:\Program Files\Java\jdk1.5.0_11\bin>
需要注意:
1.输入姓名时,要输入你及其的机器名。
2.如果你以前省生成过证书,可能会报密码不正确类似,试一试密码改为"changeit"
3.解释下导入到${java_home}\jre\lib\security目录下,证书名必须是cacerts。影响的是整个JDK环境,也就意味着影响了后来部署的tomcat app应用。刚开始,我一直没弄明白,这一步是的具体含义。看多了博客,自己揣摩的。
4.最好备份一套本地jre环境.因为你替换了证书之后,使用maven时会报安全方面的错误。到时临时切换下环境即可,省了麻烦事。
如果你懂得反呛,参考链接
https://wiki.jasig.org/display/CASUM/Demo
https://wiki.jasig.org/display/CASUM/SSL+Troubleshooting+and+Reference+Guide
部署CAS服务器
(1)安装Tomcat服务器,最好复制三分。
略
( 2) 开启SSL
打开tomcat目录的conf/server.xml文件。
修改内容片段如下
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:\Users\Administrator\.keystore" keystorePass="changeit" truststoreFile="D:\Java\jdk1.7.0_65\jre\lib\security\cacerts" />
参数说明:
keystoreFile:在第一步创建的key存放位置
keystorePass:创建证书时的密码
这是使用的keystoreFile 参数指定的.keystore文件是上面keytool -genkey 步骤中自动生成的。该文件是个隐形文件,一般默认在我的文档下面。
(3) 修改端口
1. <Server port="8555" shutdown="SHUTDOWN">
2.官方文档中可以关闭8080端口,仅仅使用443安全端口,但是为了咱们以后与IDEA或Eclipse部署源码,最好暴露。否则不能很好的集成。总之在IDEA工具总是这样。
<Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
(4)部署cas server
下载完成后将cas-3.5.3.zip解压,解压cas-server-3.5.3/modules/cas-server-webapp-3.5.3.war,改名为cas,然后复制cas目录到你的tomcat/webapp目录下即可。当然,也可以下载源码自己生成war包。我就是下载的源码,自己使用maven打包的。×××地址是https://github.com/Jasig/cas/releases/tag/v3.5.3。
启动tomcat,浏览器输入地址https://zhaoguoyu-pc/cas/login
接下来:输入用户名/密码。主要用户名和密码相同即可。可以输入admin/admin 或者test/test
出现这个画面,就表示你CA 服务器安装成功了。
如果没有成功,一般主要是证书方面的问题。
1.确认证书是否使用的是机器名。
2.确认选择的JDK。
3.最好在环境变量中不要设置TOMCAT_HOME环境变量。
4.如果Tomcat不能正常启动,大部分是端口被占用,请修改其他端口。
5.确认Tomcat SSL 的protoca协议
转载于:https://blog.51cto.com/dba10g/1753086