基于CAS的单点登录SSO[4]: 加入两个CAS客户端测试单点登录

参考:https://blog.csdn.net/gobitan/article/details/77689819

摘要:本系列的前三篇文章分别搭建了基于CAS的单点登录服务器,并让服务器支持MySQL存储用户名和密码,以及让Redis缓存用户认证信息。本文将采用CAS官方提供的基于传统WAR工程的CAS客户端样例来做单点登录测试。

环境概述
10.191.30.30 cas.example.org #CAS服务器
10.191.30.31 casclient1.example.org #CAS客户端1
10.191.30.32 casclient2.example.org #CAS客户端2
10.191.13.98 浏览器所在主机

部署CAS客户端1主机
第一步:获取CAS客户端部署包
git clone https://github.com/cas-projects/cas-sample-java-webapp

第二步:配置域名
在/etc/hosts中增加如下配置:
10.191.30.30 cas.example.org
10.191.30.31 casclient1.example.org
10.191.30.32 casclient2.example.org
配置cas-sample-java-webapp/src/main/webapp/WEB-INF/web.xml
将所有8443前面默认的mmoayyed.unicon.net替换为:cas.example.org
将所有9443前面默认的mmoayyed.unicon.net替换为:casclient1.example.org

第三步:创建客户端证书
mkdir -p /etc/cas/jetty
export DNAME="${DNAME:-CN=casclient1.example.org,OU=Example,OU=Org,C=US}"
sudo keytool -genkey -alias client -keyalg RSA -keypass changeit -storepass changeit -keystore /etc/cas/jetty/thekeystore -dname ${DNAME}
sudo keytool -exportcert -alias client -storepass changeit -keystore /etc/cas/jetty/thekeystore -file /etc/cas/jetty/client.cer

第四步:导入服务器端证书
先将服务器端生成的/etc/cas/cas.cer下载到本地的当前目录,然后执行如下命令:
sudo keytool -import -trustcacerts -alias cas -keystore $JAVA_HOME/jre/lib/security/cacerts -file cas.cer -storepass changeit
提示是否要信任该证书时,输入”是”。
注意:经测试,官方提示导入证书的位置不对。

如果要清除刚导入的证书,执行如下命令:
sudo keytool -delete -alias cas -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit

第五步:运行CAS客户端
sudo mvn clean package jetty:run-forked

部署CAS客户端2主机
所有步骤与”部署CAS客户端1主机”的操作一样,把对应的casclient1.example.org替换为casclient2.example.org即可。

配置浏览器所在的主机
在/etc/hosts中增加如下配置: 
10.191.30.30 cas.example.org
10.191.30.31 casclient1.example.org
10.191.30.32 casclient2.example.org

测试CAS客户端与服务器的集成情况
第一步:先访问CAS客户端1:https://casclient1.example.org:9443/sample,系统会跳转到https://cas.example.org:8443/cas/login,然后提示登录,输入用户名casuser和密码Mellon之后,系统回到https://casclient1.example.org:9443/sample/页面。登录成功。
第二步:再访问CAS客户端2:https://casclient2.example.org:9443/sample,这时不再需要登录。

重复上面的步骤,做另外一个客户端CAS2。需要修改的地方包括:
[1] /etc/hosts
[2] cas-sample-java-webapp/src/main/webapp/WEB-INF/web.xml
[3] 创建证书(貌似可以不改)

常见错误及解决办法:
[1] No subject alternative DNS name matching
错误详情:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching cas.example.org found.
错误原因:原因是服务器端创建证书的时候dname和SAN中的域名不匹配。
解决办法:需在cas-overlay-template的build.sh中将两者改为一样,举例如下:
DNAME="${DNAME:-CN=cas.example.org,OU=Example,OU=Org,C=US}”
CERT_SUBJ_ALT_NAMES="${CERT_SUBJ_ALT_NAMES:-dns:cas.example.org,dns:localhost,ip:127.0.0.1}"

[2] unable to find valid certification path to requested target
错误详情:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
错误原因:未将CAS服务器端的证书纳入到CAS客户端的Java keystore信任库中。
解决办法:现将服务器端的cas.cer下载下来,放在当前目录,然后执行如下命令,并在提示的时候输入”是”。如果是英文提示,需要输入”yes”。
sudo keytool -import -trustcacerts -alias cas -keystore $JAVA_HOME/jre/lib/security/cacerts -file cas.cer  -storepass changeit

posted @ 2020-05-25 11:04  嘻嘻哈哈的人生  阅读(645)  评论(0编辑  收藏  举报