Windows 环境 CAS 5.1.X 单点登录系统配置试验
在Win XP 32位本机环境,利用CAS 5.1.X,对LDAP、JDBC认证机制的多种认证模式进行了单点
登录系统(SSO)的配置试验,并采用Java和Python两种客户端作了测试,同时给出了配置流程、以
及个人在20天的配置试验过程中遇到的问题和认识,仅供参考。
1. 采用软件
软 件
JDK 8
Tomcat 9
Cas 5.1.X
下载地址
http://rj.baidu.com/soft/detail/14459.html
http://tomcat.apache.org/download-90.cgi
https://apereo.github.io/cas/5.1.x/index.html
(采用 Maven Overlay)
https://github.com/apereo/cas-overlay-template
Maven 3.5.0
http://maven.apache.org/docs/3.5.0/release-notes.html
OpenLDAP
http://www.openldap.org/software/download/
(LDAP 数据库)
https://www.userbooster.de/download/openldap-for-windows.aspx
HSQLDB 2.3.4
(关系数据库)
http://hsqldb.org/
Java Cas 示例客户端
https://github.com/cas-projects/cas-sample-java-webapp
Python Flask-Cas 客户端
https://github.com/cameronbwhite/Flask-CAS
2. 配置试验流程
1)域名映射;
2)安装 JDK 并配置系统环境变量;
3)安装 Tomcat,创建密钥库文件、导出信任证书,在 JRE 及浏览器中导入信任证书,然后在 Tomcat
\conf 目录下的 server.xml 中添加 HTTPS 配置信息,启动 Tomcat HTTPS 服务;
4)编译生成 CAS WAR 包。下载并解包 cas-overlay-template,在 pom.xml 的中添加依
赖包信息,修改\etc\cas\config 下的 cas.properties 文件,然后 Maven 编译生成 cas.war;
5)部署 WAR 包 cas.war 到 Tomcat 的 \webapps\ 下,然后启动 Tomcat 实施 CAS 静态认证测试;
6)启动数据库服务。分别安装 OpenLDAP、HSQLDB 数据库,拟定数据结构,将测试数据导入数据库,
启动 OpenLDAP、HSQLDB 数据库服务;
7) CAS 认证配置。编辑\tomcat\webapps\cas\WEB-INF\classes 下的 application.properties 文件,
配置 CAS,然后启动 Tomcat 实施 CAS 动态认证测试;
8) 客户端应用单点登录测试。安装 CAS 客户端程序,在\tomcat\webapps\cas\WEB-INF\classes\services
下添加 JSON 格式客户端注册文件,客户端单点登录并返回用户认证的属性信息。
· Cas 5通过Spring Boot框架作了重构,配置比之前版本简单了,因此不要让网上大量的早期配置方法资料引入
误区,目前Cas 5配置最好的参考资料在其官网:https://apereo.github.io/cas/5.1.x/index.html
1
3. 配置试验
3.1 域名映射
打开 C:\WINDOWS\system32\drivers\etc 下的 hosts 文件,为本机地址 127.0.0.1/localhost 添
加服务器端域名(server.hds.org),以及两个客户端的域名(app1.hds.org、app2.hds.org)。
3.2 安装 JDK 8
下载并安装 JDK 8,安装完毕配置 Windows 系统环境变量,这样执行 Java 命令行工具时就不用敲
全路径了:
1) 新建 JAVA_HOME 变量,例如:D:\Program Files\Java\jdk8
2) 在 Path 中添加路径:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
3) 在 Classpath 中添加路径:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;
3.3 安装 Tomcat 9
1)下载并安装 Tomcat 9, 安装完毕点击 Tomcat \bin 下的 startup.bat 启动 Tomcat,然后在浏
览器的地址栏输入 http://server.hds.org:8080,显示如下 Tomcat 9 页面表示安装成功,Tomcat HTTP
协议的缺省端口为 8080。
2
2)创建 Tomcat 服务的密钥库文件,java 的 keytool 工具命令行为:
keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore D:\tomcat.keystore
其中:“-validity 3650”表示证书有效期 10 年,有效期缺省值 90 天;
“-alias tomcat”表示密钥库的别名是 tomcat,实际操作都用别名识别,所以这个参数很重要;
下图中:“密钥库口令”我送的是“123456”;
“名字与姓氏”输入服务器域名,其它一路回车,最后如果显示正确输入“y”就行了;
密钥口令我采用与密钥库相同,即也是“123456”,因此也是一路回车。
之后可用命令行:keytool –list –keystore tomcat.keystore 查看生成密钥库的文件内容:
2)导出信任证书 tomcat.cer, keytool 工具命令行为:
keytool -export -alias tomcat -file d:/tomcat.cer -keystore d:/tomcat.keystore -validity 36500
3
3)将导出的信任证书 tomcat.cer 导入%JAVA_HOME%\jre\lib\security 下的 Java 运行环境证书库
cacerts,证书库 cacerts 的缺省口令为 changeit, keytool 工具命令行为:
keytool –import –keystore cacerts –file d:\tomcat.cer –alias tomcat –storepass changeit
4)打开 \conf 目录下的 server.xml 文件,添加如下的 Tomcat HTTPS 协议配置信息,默认端口 8443:
其中:clientAuth="false" 表示单向 HTTPS 认证,就是服务器端要向客户端出示信任证书(即:如果
客户端也走 HTTPS 协议,只需要将 tomcat 信任证书导入客户端的 keystore 证书库中就可以了,
客户端不用向服务器端出示证书,服务器端不关心客户是否可信任)。
之后启动 Tomcat,在浏览器地址栏输入 https://server.hds.org:8443,显示如下 Tomcat 9 页面
表示 HTTPS 配置成功,Tomcat HTTPS 协议的缺省端口为 8443。
4
4)双击已经生成的 tomcat.cer 文件,将证书作为根证书导入浏览器,如果浏览器允许(有的浏览器,
如火狐,认为自签名的证书不是安全证书),浏览器地址栏的红划线将变成一把绿锁,就此 Tomcat HTTPS
8443 端口服务可被安全运行了。
· 开始安装的是Tomcat 8,结果部署的时候Tomcat自带的jar包和应用的jar包发生冲突,最后将Tomcat 升到
Tomcat 9,问题就解决了。网上有说作一些配置,让优先使用应用的jar包,我没试
· Server.xml的XML语句中,让其中的各子句之间仅隔一个空格,避免Java不认特殊字符(例如回车)导致无法
预料的结果
· 生成的tomcat.cer是根证书,同一域名下的cas服务就不需要另配证书了
5
3.4 编译生成 CAS WAR 包
1)下载 cas5.1.x maven war overlay 的 cas-overlay-template,解包到一目录下(例如 cas5.1)
6
2) 下载 maven,设置 windows 环境变量,这样 maven 编译时就不用敲执行文件路径了:
-- 新建 MAVEN_HOME 变量,例如:D:\apache-maven-3.5.0
-- 在 Path 中添加路径:%MAVEN_HOME%\bin;
3)打开 CAS 根目录下的 pom.xml 文件,在
标签中添加你需要的依赖包,这样 maven
编译时会自动去网上下载相关的 jar 包,满足服务需求,我添加的包括:
a)LDAP
org.apereo.cas
cas-server-support-ldap
${cas.version}
b)JDBC
org.apereo.cas
cas-server-support-jdbc-drivers
${cas.version}
org.apereo.cas
cas-server-support-jdbc
${cas.version}
c)HSQLDB 数据库的,我用的是 hsqldb 2.3.4
org.hsqldb
hsqldb
2.3.4
d)JSON 格式 cas 客户端注册的
org.apereo.cas
cas-server-support-json-service-registry
${cas.version}
7
3)打开 CAS \etc\cas\config 目录下的 cas.properties,修改 cas 服务的域名,如果采用 JSON
格式文件进行客户端注册(即设置客户端 URL 的过滤器),将最后一句的注释(即“#”号)去掉:
cas.server.name: https://server.hds.org:8443
cas.server.prefix: https://server.hds.org:8443/cas
cas.adminPagesSecurity.ip=127\.0\.0\.1
logging.config: file:/etc/cas/config/log4j2.xml
cas.serviceRegistry.config.location: classpath:/services
4) maven 编译,如果编译成功会在\target\目录下生成文件名 为 cas.war 的 WAR 包
8