【SSO单点登录】8.CAS框架实现单点登录(一)

本文章由聚项云平台博客独家原创,转载请注明出处:http://blog.jxcode.com/?p=3087&preview=true

之前讲解了如何使用cookie实现跨子域的单点登录和使用第三方登录实现完全跨域的单点登录,本节我们来介绍一下另外一种实现单点登录的方式—-使用CAS框架实现单点登录。

一、CAS介绍
(1)简介
CAS全名“Central Authentication Service”始于2001年,是耶鲁(Yale)大学一个组织发起的一个企业级开源的项目,后来由apereo管理、遵循apache 2.0协议。目前CAS为apereo托管的的一个项目,可以在其官网(https://www.apereo.org/projects/cas)上下载最新版本。

(2)特点
1、开源的、多协议的 SSO 解决方案; Protocols : Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等。

2、支持多种认证机制: Active Directory 、 JAAS 、 JDBC 、 LDAP 、 X.509 Certificates 等;

3、安全策略:使用票据( Ticket )来实现支持的认证协议;

4、支持授权:可以决定哪些服务可以请求和验证服务票据( Service Ticket );

5、提供高可用性:通过把认证过的状态数据存储在 TicketRegistry 组件中,这些组件有很多支持分布式环境的实现, 如: BerkleyDB 、 Default 、 EhcacheTicketRegistry 、 JDBCTicketRegistry 、 JBOSS TreeCache 、 JpaTicketRegistry 、 MemcacheTicketRegistry 等;

6、支持多种客户端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。

二、CAS样例工程
下面我们通过搭建CAS开源工程的认证中心、客户端样例来学习如何使用CAS认证框架。
搭建环境:
操作系统:windows10
JDK版本:jdk1.8.0_171
tomcat版本:apache-tomcat-8.5.31
CAS版本:4.0.1

1.准备工作
由于CAS单点登录系统是基于JAVA安全证书的 https 访问,不能直接通过ip访问。要使用CAS单点登录必须要配置域名。所以这里为了演示不同域名下的登录,我们首先修改一下系统的hosts文件,为本地的127.0.0.1配置三个域名(修改C:\Windows\System32\drivers\etc\hosts):
127.0.0.1 client1.castest.com
127.0.0.1 client2.castest.com
127.0.0.1 server.castest.com
其中client1.castest.com和client1.castest.com是对应部署的两个需要单点登录的客户端应用所在的tomcat域名。而server.castest.com对应CAS单点登录认证服务端应用所在的tomcat域名,且还用于服务端证书的生成。

将apache-tomcat-8.5.31复制三份,分别命名为:
apache-tomcat-8.5.31-server
apache-tomcat-8.5.31-client1
apache-tomcat-8.5.31-client2
这样保证每一个应用单独运行在一个tomcat容器中:
图8.0

端口号分别修改为8081/8082/8083,其它端口号设置为不被互相占用的即可。

2.配置HTTPS证书
由于CAS默认基于HTTPS协议(当然也支持HTTP),这里我们需要配置服务端所在的tomcat,使其支持SSL安全协议访问。
首先打开cmd控制台,然后输入以下命令:
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass castest -validity 365 -keystore c:\castest.keystore -storepass castest
解释:
Keytool 是一个Java 数据证书的管理工具 ,Keytool 将密钥(key)和证书(certificates)存在一个称为keystore的文件中 在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
—————————————————————————————
JDK中keytool 常用命令:
-genkey 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书
(在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:/Documents and Settings/UserName/文件名为“.keystore”)
-alias 产生别名
-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)
-keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA))
-validity 指定创建的证书有效期多少天
-keysize 指定密钥长度
-storepass 指定密钥库的密码(获取keystore信息所需的密码)
-keypass 指定别名条目的密码(私钥的密码)
-dname 指定证书拥有者信息 例如: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码”
-list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码
-v 显示密钥库中的证书详细信息
-export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码
-file 参数指定导出到文件的文件名
-delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore -storepass 密码
-printcert 查看导出的证书信息 keytool -printcert -file yushan.crt
-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage
-storepasswd 修改keystore口令 keytool -storepasswd -keystore e:/yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)
-import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书
—————————————————————————————
系统会提示输入以下信息:
图8.1
其中“您的名字与姓氏是什么”必须制定hosts下的服务端域名“server.castest.com”。
然后在cmd窗口输入以下命令导出证书:
keytool -export -alias ssodemo -keystore c:\castest.keystore -file c:\ssodemo.crt -storepass castest
图8.2
然后到C盘后可以看到生成了响应的crt文件:
图8.3
证书在客户端和服务端都需要,我们本次先配置服务端的,首先要把证书导入到服务端证书库,由于服务端需要使用JDK,而JDK有自己的证书库,所以我们将证书导入到JDK的证书库文件中:
keytool -import -trustcacerts -alias ssodemo -keystore “C:/Program Files/Java/jdk1.8.0_171/jre/lib/security/cacerts” -file c:/ssodemo.crt -storepass changeit
回车后填写秘钥库口令的时候,storepass密码必须要输入changeit(如果是多台服务端,需要在每一台服务端安装证书):
图8.4
下面为服务端所在tomcat(apache-tomcat-8.5.31-server)配置证书SSL服务。首先打开tomcat路径下的conf\server.xml文件,修改Connector配置的端口号和添加SSL认证参数:

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
 maxThreads="150" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="C:/castest.keystore"
            type="RSA" certificateKeystoreType="JKS" certificateKeystorePassword="castest"/>
    </SSLHostConfig>
</Connector>

其中certificateKeystoreFile为创建证书的路径,certificateKeystorePassword为创建证书的密码。

然后我们在tomcat文件夹下找到bin/startup.bat 启动tomcat,在浏览器访问“https://server.castest.com:8081/”,出现下面的画面,证明服务端的tomcat的https配置成功:
图8.5

这里我们用的是360极速浏览器,在此处添加对该证书的信任:
图8.6
切换回兼容模式,就不会再域名上打岔了。
图8.7

由于篇幅太长,我们在下一篇来讲解CAS服务端样例工程的导入和配置。

未经允许不得转载:博客 » 【SSO单点登录】8.CAS框架实现单点登录(一)

赞 (1)

评论 0

评论前必须登录!

登陆 注册