CAS 4.2.7实现系统间双向认证互信完整配置指南
简介:CAS(Central Authentication Service)是一个开源的单点登录解决方案,支持用户在多个系统间统一认证。本文档基于CAS 4.2.7版本,详细讲解如何实现其他系统与CAS之间的双向认证互信。内容涵盖CAS服务器部署、协议配置、服务注册、客户端集成、票证验证、安全通信、日志监控等关键步骤,适用于需要构建SSO环境的Web项目。通过解压并整合提供的web项目包,可快速完成配置并实现系统间的互信认证。 
1. CAS单点登录系统简介
CAS(Central Authentication Service)是一种广泛采用的开源单点登录(SSO)解决方案,允许用户通过一次身份验证,访问多个受信任的应用系统。该协议最初由耶鲁大学开发,现由Apereo基金会维护,已被广泛应用于高校、政府及企业级系统中。
本章将从CAS的基本架构入手,解析其核心认证流程:用户访问受保护资源 → 跳转至CAS服务器登录 → 获取票据并访问目标服务。同时,我们将聚焦CAS 4.2.7版本,介绍其在协议支持、安全性增强及部署灵活性方面的改进,例如对OAuth 2.0和SAML协议的内置支持、配置模块化的提升等。通过本章内容,读者可以建立对CAS系统的整体认知,并理解其在现代身份认证体系中的关键作用。
2. CAS 4.2.7服务器部署与配置
部署和配置CAS(Central Authentication Service)服务器是实现单点登录系统的关键步骤。CAS 4.2.7版本作为长期支持(LTS)版本,具有良好的稳定性和兼容性,广泛应用于企业级应用中。本章将详细介绍如何在Linux环境下完成CAS服务器的部署与配置,包括环境准备、项目构建、配置文件修改、服务启动与测试等关键步骤。通过本章内容,读者将能够掌握完整的CAS服务器部署流程,并具备对服务器进行基础调试与问题排查的能力。
2.1 CAS服务器的安装环境准备
在部署CAS服务器之前,首先需要准备好运行环境。CAS依赖Java运行时环境(JRE)和Servlet容器,通常推荐使用Tomcat作为其运行容器。以下将从操作系统、Java环境配置以及Tomcat的安装与调优三个方面进行详细说明。
2.1.1 操作系统与Java环境配置
CAS 4.2.7版本要求Java 8或以上版本的支持。以下步骤展示了如何在基于Debian/Ubuntu的Linux系统上安装和配置Java环境。
安装Java运行环境
sudo apt update
sudo apt install openjdk-8-jdk -y
验证Java版本
java -version
输出示例如下:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
设置JAVA_HOME环境变量
编辑 /etc/environment 文件:
sudo nano /etc/environment
添加以下内容:
JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64"
保存后执行以下命令使其生效:
source /etc/environment
验证JAVA_HOME设置
echo $JAVA_HOME
输出应为:
/usr/lib/jvm/java-8-openjdk-amd64
逻辑分析:
apt update更新软件包列表。apt install openjdk-8-jdk安装JDK 8,包括JRE。java -version检查安装版本是否正确。- 设置
JAVA_HOME是为了让系统知道Java的安装路径,尤其在运行Tomcat等Java应用服务器时至关重要。
2.1.2 Tomcat服务器的安装与调优
CAS 4.2.7推荐使用Apache Tomcat 8或以上版本进行部署。以下步骤演示如何在Linux环境下安装并优化Tomcat服务器。
下载并安装Tomcat 8
cd /opt
sudo wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.83/bin/apache-tomcat-8.5.83.tar.gz
sudo tar -xvzf apache-tomcat-8.5.83.tar.gz
sudo mv apache-tomcat-8.5.83 tomcat
启动Tomcat进行测试
/opt/tomcat/bin/startup.sh
验证Tomcat是否启动成功
访问 http://<your-server-ip>:8080 ,若看到Tomcat默认页面则表示安装成功。
配置Tomcat内存参数(调优)
编辑 bin/setenv.sh 文件(若不存在则创建):
sudo nano /opt/tomcat/bin/setenv.sh
添加以下内容以优化内存使用:
export JAVA_OPTS="-Xms512m -Xmx2048m -Djava.awt.headless=true -Dfile.encoding=UTF-8"
逻辑分析:
-Xms512m:初始堆内存大小设置为512MB。-Xmx2048m:最大堆内存大小设置为2GB。-Djava.awt.headless=true:禁用图形界面支持,适用于服务器环境。-Dfile.encoding=UTF-8:设置文件编码为UTF-8,避免乱码问题。
设置Tomcat为系统服务(可选)
创建服务文件:
sudo nano /etc/systemd/system/tomcat.service
添加以下内容:
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
User=root
Group=root
RestartSec=10
Restart=always
[Install]
WantedBy=multi-user.target
保存后执行:
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
参数说明:
Environment:定义运行环境变量。ExecStart和ExecStop:指定Tomcat的启动和停止脚本路径。User和Group:运行Tomcat的服务用户和组。Restart:设置服务异常退出后自动重启。
2.2 CAS项目的构建与部署
CAS 4.2.7支持通过Maven构建项目,也可以直接使用官方提供的WAR包进行部署。下面将分别介绍两种方式的具体操作步骤。
2.2.1 使用Maven构建CAS项目
CAS的源码托管在GitHub上,可以通过Maven工具进行构建。
安装Maven
sudo apt install maven -y
mvn -v
克隆CAS源码
git clone -b 4.2.7 https://github.com/apex/CAS.git cas-server
cd cas-server
构建WAR包
mvn clean package
构建完成后,WAR包将位于 target 目录下,如: cas.war
验证构建结果
ls -l target/cas.war
输出应为:
-rw-r--r-- 1 root root 854321 Jan 1 12:00 target/cas.war
逻辑分析:
git clone获取CAS 4.2.7分支源码。mvn clean package清理旧构建并重新打包。target/cas.war是最终构建的Web应用包,可部署到Tomcat中。
2.2.2 将CAS WAR包部署到Tomcat中
CAS官方也提供了预构建的WAR包,可直接下载使用。
下载预构建WAR包
cd /opt/tomcat/webapps
sudo wget https://github.com/apex/CAS/releases/download/v4.2.7/cas.war
部署WAR包
将 cas.war 文件放入Tomcat的 webapps 目录下,Tomcat会自动解压部署。
sudo systemctl restart tomcat
查看部署日志
tail -f /opt/tomcat/logs/catalina.out
等待日志输出类似如下信息表示部署成功:
INFO: Server startup in [xxx] milliseconds
验证部署结果
访问 http://<your-server-ip>:8080/cas ,进入CAS登录页面表示部署成功。
2.3 基础配置与运行测试
CAS部署完成后,需要根据实际环境进行配置,如数据库连接、服务注册、安全设置等。本节将介绍如何修改核心配置文件,并进行初步的运行测试。
2.3.1 修改配置文件application.properties
CAS的配置文件位于 WEB-INF/classes/application.properties 。
修改默认登录凭据
默认情况下,CAS使用静态用户名和密码登录。可以通过以下配置修改:
cas.authn.accept.users=casuser::Mellon
其中, casuser 是用户名, Mellon 是密码。
启用数据库认证(可选)
若需使用数据库认证,配置如下:
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas
cas.authn.jdbc.query[0].username=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].sql=SELECT * FROM users WHERE username=?
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
配置日志路径
logging.config=file:/opt/tomcat/logs/cas.log
逻辑分析:
cas.authn.accept.users:定义静态用户认证信息。cas.authn.jdbc:启用JDBC数据库认证,支持MySQL、PostgreSQL等。logging.config:指定日志输出路径,便于监控和排查问题。
2.3.2 登录页面的初步测试与验证
访问 http://<your-server-ip>:8080/cas/login ,输入用户名 casuser 和密码 Mellon ,如果成功跳转到“登录成功”页面,则表示配置生效。
登录流程图(mermaid格式)
graph TD
A[用户访问受保护资源] --> B[重定向至CAS登录页]
B --> C{用户是否已认证?}
C -- 是 --> D[生成Service Ticket]
C -- 否 --> E[用户输入用户名密码]
E --> F[验证凭证]
F -- 成功 --> G[生成Ticket Granting Ticket]
G --> H[重定向回应用]
2.4 CAS服务器的启动与服务状态检查
部署和配置完成后,需要验证CAS服务器是否正常运行,并能处理认证请求。
2.4.1 启动Tomcat并查看日志
启动Tomcat服务
sudo systemctl start tomcat
查看日志输出
tail -f /opt/tomcat/logs/catalina.out
观察日志是否出现如下内容:
INFO [org.jasig.cas.web.CasWebApplicationServletInitializer] - <Startup complete>
该日志表明CAS应用已成功启动。
2.4.2 验证CAS服务是否正常运行
使用curl测试CAS登录接口
curl -v http://localhost:8080/cas/login
如果返回HTML页面内容,则表示服务正常运行。
测试服务可用性(表格)
| 测试项 | 命令 | 预期结果 |
|---|---|---|
| 检查Tomcat状态 | systemctl status tomcat |
active (running) |
| 查看监听端口 | netstat -tuln | grep 8080 |
tcp6 0 0 :::8080 :::* LISTEN |
| 访问登录页面 | 浏览器访问 http://ip:8080/cas |
显示CAS登录页面 |
逻辑分析:
systemctl status tomcat可以确认Tomcat是否处于运行状态。netstat检查端口监听情况,确保Tomcat监听了8080端口。- 浏览器访问测试验证了Web应用的可访问性。
本章详细讲解了CAS服务器的部署全过程,包括环境准备、项目构建、配置文件修改、服务部署与测试。通过本章的学习,读者可以掌握在Linux环境下搭建CAS服务器的完整流程,并具备基础的配置与调试能力,为后续章节中关于协议支持、服务注册与客户端集成等内容打下坚实基础。
3. 支持的认证协议(CAS、SAML、OAuth等)
在现代身份认证体系中,认证协议的选择直接决定了系统的安全性、兼容性与扩展性。CAS(Central Authentication Service)作为一个广泛使用的单点登录(SSO)系统,支持多种主流认证协议,包括原生的CAS协议、SAML(Security Assertion Markup Language)以及OAuth 2.0等。本章将深入解析这些协议在CAS 4.2.7版本中的实现机制、使用场景及其配置方式,并通过实践案例展示多协议共存的集成方案。
3.1 CAS协议的核心机制
CAS协议是整个CAS系统的基础协议,其设计目标是实现跨域的单点登录,使得用户在多个应用之间无需重复登录。
3.1.1 CAS协议的请求与响应流程
CAS协议的交互流程主要包括以下几个关键步骤:
- 用户访问受保护的客户端应用。
- 客户端检测到用户未登录,将其重定向至CAS服务器的登录页面。
- 用户输入用户名和密码进行身份验证。
- CAS服务器验证成功后,生成一个Ticket Granting Ticket (TGT),并返回一个Service Ticket (ST)。
- 客户端将ST发送给CAS服务器进行验证。
- CAS服务器验证ST有效后,返回用户身份信息。
- 客户端应用根据返回信息完成用户登录,并建立本地会话。
这一流程可以使用Mermaid流程图清晰展示如下:
graph TD
A[用户访问受保护资源] --> B[客户端重定向至CAS登录页]
B --> C[用户输入凭证登录]
C --> D[CAS验证凭证]
D -->|验证成功| E[生成TGT并发放ST]
E --> F[客户端使用ST验证身份]
F --> G[CAS返回用户信息]
G --> H[客户端完成登录]
3.1.2 Ticket Granting Ticket与Service Ticket的关系
在CAS协议中,Ticket Granting Ticket(TGT)和Service Ticket(ST)是两个核心票据对象:
- TGT :由CAS服务器生成,代表用户的全局会话,通常存储在服务器端的会话缓存中。TGT具有较长的有效期,用于生成ST。
- ST :是面向特定服务的单次使用票据。用户访问某个服务时,CAS服务器会为该服务生成一个ST,客户端应用使用该ST进行身份验证。
两者的关系如下表所示:
| 属性 | TGT | ST |
|---|---|---|
| 生命周期 | 较长,通常为几小时至几天 | 短暂,通常为几分钟 |
| 存储位置 | CAS服务器端 | 客户端临时缓存 |
| 使用次数 | 多次使用 | 一次性使用 |
| 关联对象 | 用户 | 用户 + 特定服务 |
3.2 SAML协议在CAS中的支持
SAML是一种基于XML的开放标准,用于在身份提供者(IdP)和服务提供者(SP)之间交换身份验证和授权数据。CAS支持SAML协议,使得它可以作为IdP为SAML服务提供认证服务。
3.2.1 SAML 1.1与SAML 2.0的对比
SAML有两个主要版本:1.1和2.0,它们在安全机制、通信方式、支持场景等方面有显著差异。
| 对比维度 | SAML 1.1 | SAML 2.0 |
|---|---|---|
| 协议标准 | OASIS SAML 1.1 | OASIS SAML 2.0 |
| 支持的绑定方式 | HTTP重定向、SOAP等 | HTTP POST、HTTP重定向、SOAP等 |
| 会话管理 | 不支持 | 支持会话建立与注销 |
| 主体标识 | 基于NameIdentifier | 支持Subject和NameID |
| 安全性 | 相对较弱 | 支持加密和签名机制,更安全 |
| 应用范围 | 已逐渐淘汰 | 广泛用于企业SSO、云服务集成 |
CAS 4.2.7默认支持SAML 2.0协议,可以通过配置启用SAML IdP功能,为第三方服务提供认证。
3.2.2 在CAS中启用SAML支持
在CAS中启用SAML支持需要进行以下步骤:
- 添加依赖 :确保
pom.xml中包含SAML相关的依赖,如:
xml <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-saml</artifactId> <version>4.2.7</version> </dependency>
- 配置SAML属性 :在
application.properties中添加SAML相关配置:
properties cas.standalone.configurationDirectory=file:/etc/cas/saml cas.saml.idp.entityId=https://cas.example.org/idp cas.saml.idp.signingKey=/etc/cas/saml/idp-signing.key
-
生成SAML元数据 :启动CAS后,访问
/idp/metadata路径可下载SAML元数据文件,用于SP端配置。 -
SP端配置 :将上述元数据文件导入SP系统,完成服务注册与绑定。
3.3 OAuth 2.0协议的集成
OAuth 2.0是一种授权协议,常用于第三方应用访问用户资源。CAS 4.2.7也支持OAuth 2.0协议,可以作为OAuth 2.0授权服务器(Authorization Server)提供服务。
3.3.1 OAuth 2.0在单点登录中的应用
OAuth 2.0的核心在于授权码流程(Authorization Code Flow),其主要流程如下:
- 用户尝试访问需要授权的客户端应用。
- 客户端应用将用户重定向至CAS的OAuth授权端点。
- 用户登录CAS并授权客户端访问。
- CAS返回一个授权码(Authorization Code)给客户端。
- 客户端使用授权码向CAS请求访问令牌(Access Token)。
- CAS验证授权码后发放Token。
- 客户端使用Token访问受保护资源。
OAuth 2.0适用于移动应用、Web API、微服务等现代架构,具有良好的扩展性和安全性。
3.3.2 CAS作为OAuth 2.0授权服务器的配置
要在CAS中启用OAuth 2.0支持,需进行以下配置:
- 添加OAuth依赖 :
xml <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-oauth</artifactId> <version>4.2.7</version> </dependency>
- 配置OAuth客户端 :在
application.properties中添加客户端信息:
properties cas.oauth2.clients[0].clientId=my-client-id cas.oauth2.clients[0].clientSecret=my-client-secret cas.oauth2.clients[0].redirectUris[0]=https://myapp.com/callback cas.oauth2.clients[0].grantTypes[0]=authorization_code
- 获取授权码 :用户访问以下URL进行授权:
https://cas.example.org/oauth2.0/authorize?client_id=my-client-id&response_type=code&redirect_uri=https://myapp.com/callback
- 获取Access Token :客户端使用授权码向CAS请求Token:
bash curl -X POST https://cas.example.org/oauth2.0/token \ -d "grant_type=authorization_code" \ -d "client_id=my-client-id" \ -d "client_secret=my-client-secret" \ -d "code=AUTHORIZATION_CODE"
代码解析:
-X POST:指定使用POST方法提交请求。grant_type=authorization_code:表示使用授权码模式。client_id和client_secret:客户端的身份标识和密钥。code:从授权端点获取的授权码。
3.4 多协议支持的配置实践
在实际应用中,CAS往往需要同时支持多种认证协议,以满足不同客户端和系统的需求。本节将介绍如何在同一CAS服务器上启用CAS、SAML和OAuth三种协议,并探讨其客户端集成方式。
3.4.1 同时启用CAS、SAML与OAuth
CAS默认支持CAS协议,要同时启用SAML和OAuth,需确保以下依赖已正确添加:
<!-- SAML支持 -->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-saml</artifactId>
<version>4.2.7</version>
</dependency>
<!-- OAuth支持 -->
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-oauth</artifactId>
<version>4.2.7</version>
</dependency>
此外,在 application.properties 中分别配置SAML和OAuth的参数,如前所述。
3.4.2 不同协议的客户端集成方式
不同协议的客户端集成方式略有不同,下表总结了CAS、SAML和OAuth的客户端集成方式:
| 协议类型 | 客户端集成方式说明 | 示例场景 |
|---|---|---|
| CAS | 使用CAS客户端库(如Java CAS Client)或配置反向代理,通过重定向实现认证 | Java Web应用、Apache反向代理 |
| SAML | 配置SP端使用CAS作为IdP,导入CAS的SAML元数据,设置SAML绑定方式 | Salesforce、Okta等SaaS服务 |
| OAuth | 使用OAuth客户端SDK(如Spring Security OAuth2)或调用CAS的OAuth端点获取Token | 移动应用、API网关 |
示例:Java应用同时支持CAS和OAuth认证
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().disable()
.oauth2Login()
.loginPage("/login")
.and()
.cas()
.loginUrl("https://cas.example.org/login");
}
}
此配置实现了OAuth 2.0和CAS协议的共存,用户可以通过OAuth方式或CAS方式登录。
本章深入解析了CAS 4.2.7支持的三大认证协议:原生的CAS协议、SAML 2.0和OAuth 2.0。通过对每种协议的交互流程、核心概念及配置方式的详细讲解,帮助读者理解不同协议的适用场景和集成方式。同时,本章还展示了如何在CAS服务器上同时启用多协议,并通过实际代码示例说明不同客户端的集成方法,为构建灵活、安全的单点登录系统打下坚实基础。
4. 服务端服务注册配置
在CAS单点登录系统中,服务注册是实现SSO(Single Sign-On)机制的关键环节。通过服务注册,CAS服务器能够识别哪些客户端应用可以接入认证流程,并在认证成功后正确地将用户重定向回对应的服务地址。本章将深入解析服务注册的定义、作用、实现方式以及策略配置,帮助读者掌握在CAS 4.2.7版本中如何高效、安全地完成服务注册管理。
4.1 服务注册的概念与意义
4.1.1 什么是服务注册?
服务注册(Service Registration)是指将一个客户端应用(例如Web应用、API服务等)的元信息(如服务URL、认证策略、属性释放规则等)添加到CAS服务器中,使得该服务能够在认证流程中被识别和处理。在CAS系统中,服务注册是构建SSO体系的基础环节。
服务注册的核心在于建立CAS与客户端之间的信任关系。只有注册后的服务,才能在用户成功认证后获取Ticket并完成登录流程。
4.1.2 服务注册在CAS中的作用
服务注册在CAS系统中扮演着多个关键角色:
| 角色 | 功能描述 |
|---|---|
| 身份认证 | 控制哪些服务可以使用CAS进行认证 |
| 访问控制 | 为不同服务设置不同的认证策略(如是否需要MFA) |
| 属性释放 | 控制认证成功后向服务释放哪些用户属性 |
| 重定向管理 | 认证完成后将用户重定向回对应的服务URL |
| 安全控制 | 限制服务的访问范围,防止非法服务冒充接入 |
服务注册不仅是技术配置行为,更是企业安全策略的重要组成部分。通过合理配置,可以实现精细化的权限管理与安全控制。
4.2 静态服务注册方式
4.2.1 手动添加服务定义文件
在CAS 4.2.7中,静态服务注册是最常见的方式,主要通过在 /etc/cas/services 目录下创建JSON格式的服务定义文件实现。
示例:创建一个服务定义文件
{
"@class" : "org.jasig.cas.services.RegexRegisteredService",
"serviceId" : "https://app.example.com/**",
"name" : "Example Application",
"id" : 10000001,
"description" : "An example web application using CAS SSO",
"enabled" : true,
"ssoEnabled" : true,
"evaluationOrder" : 100,
"attributeReleasePolicy" : {
"@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy"
}
}
参数说明:
| 参数名 | 描述 |
|---|---|
@class |
服务注册的实现类,通常使用 RegexRegisteredService 表示基于正则的服务匹配 |
serviceId |
服务的URL模式,使用正则表达式匹配 |
name |
服务名称,用于识别 |
id |
唯一服务ID,必须为整数且唯一 |
description |
服务描述信息 |
enabled |
是否启用该服务 |
ssoEnabled |
是否启用单点登录功能 |
evaluationOrder |
服务匹配优先级,数值越小优先级越高 |
attributeReleasePolicy |
属性释放策略,控制用户信息释放范围 |
逻辑分析:
- 该服务定义文件表示允许所有以
https://app.example.com/开头的URL进行CAS认证。 - 服务ID为
10000001,是服务的唯一标识。 evaluationOrder值为100,说明该服务在匹配规则中的优先级较低。- 使用
ReturnAllAttributeReleasePolicy策略,表示认证成功后将释放所有用户属性。
4.2.2 服务定义文件的结构与字段说明
服务定义文件采用JSON格式,核心字段如下:
| 字段名 | 类型 | 必填 | 描述 |
|---|---|---|---|
@class |
字符串 | 是 | 服务类名,通常为 RegexRegisteredService |
serviceId |
字符串 | 是 | 匹配服务的URL正则表达式 |
name |
字符串 | 是 | 服务名称 |
id |
整数 | 是 | 唯一服务ID |
description |
字符串 | 否 | 描述信息 |
enabled |
布尔值 | 否 | 是否启用 |
ssoEnabled |
布尔值 | 否 | 是否启用SSO |
evaluationOrder |
整数 | 否 | 匹配顺序 |
attributeReleasePolicy |
JSON对象 | 否 | 属性释放策略 |
mermaid流程图:服务注册匹配流程
graph TD
A[用户访问客户端] --> B{CAS服务是否注册?}
B -->|是| C[开始认证流程]
B -->|否| D[拒绝访问]
C --> E[认证成功后生成TGT]
E --> F[生成ST并重定向回客户端]
4.3 动态服务注册方式
4.3.1 使用REST API进行服务注册
CAS 4.2.7支持通过REST API动态注册服务,适用于服务数量庞大或需要自动注册的场景。
示例:使用curl注册服务
curl -u casadmin:secret -X POST -H "Content-Type: application/json" -d '{
"name": "Dynamic Service",
"serviceId": "https://dynamic.example.com/**",
"description": "A dynamically registered service",
"enabled": true,
"ssoEnabled": true,
"evaluationOrder": 101,
"attributeReleasePolicy": {
"@class": "org.jasig.cas.services.ReturnAllAttributeReleasePolicy"
}
}' https://cas.example.com/cas/v1/services
参数说明:
| 参数名 | 描述 |
|---|---|
-u |
指定具有注册权限的管理员账户和密码 |
-X POST |
发送POST请求 |
-H |
设置请求头,指定JSON格式 |
-d |
请求体,包含服务定义 |
URL |
CAS REST API服务注册接口地址 |
逻辑分析:
- 该请求使用
casadmin账户通过REST API注册一个服务。 - 注册内容与静态JSON文件类似,但由程序或脚本动态发起。
- 成功注册后,服务将自动保存在CAS服务库中,无需手动创建文件。
4.3.2 配置动态服务注册的权限与安全控制
为了防止非法服务注册,必须对REST API注册接口进行权限控制:
修改 application.properties 启用API注册:
# 启用服务注册API
cas.serviceRegistry.initFromJson=true
# 配置API注册的访问权限
cas.standalone.configuration-security.api-register-enabled=true
cas.standalone.configuration-security.api-register-username=casadmin
cas.standalone.configuration-security.api-register-password=secret
参数说明:
| 参数 | 描述 |
|---|---|
cas.serviceRegistry.initFromJson |
是否从JSON文件初始化服务注册 |
cas.standalone.configuration-security.api-register-enabled |
是否启用REST API注册功能 |
cas.standalone.configuration-security.api-register-username |
允许注册的用户名 |
cas.standalone.configuration-security.api-register-password |
允许注册的密码 |
表格:REST API注册安全控制策略建议
| 策略 | 推荐值 | 说明 |
|---|---|---|
| 启用状态 | true | 启用API注册 |
| 用户名 | casadmin | 专用账户 |
| 密码 | 强密码 | 避免使用默认密码 |
| IP限制 | 可选 | 配置IP白名单提高安全性 |
4.4 服务策略与属性配置
4.4.1 服务访问控制策略设置
CAS支持对服务设置访问控制策略,例如基于IP、用户角色、多因素认证等条件限制服务访问。
示例:配置IP访问控制策略
{
"@class" : "org.jasig.cas.services.RegexRegisteredService",
"serviceId" : "https://secureapp.example.com/**",
"name" : "Secure Application",
"id" : 10000002,
"enabled" : true,
"ssoEnabled" : true,
"evaluationOrder" : 99,
"accessStrategy" : {
"@class" : "org.jasig.cas.services.DefaultRegisteredServiceAccessStrategy",
"enabled" : true,
"ipAddressWhitelist" : [ "java.util.HashSet", [ "192.168.1.0/24" ] ]
},
"attributeReleasePolicy" : {
"@class" : "org.jasig.cas.services.ReturnAllAttributeReleasePolicy"
}
}
参数说明:
| 参数 | 描述 |
|---|---|
accessStrategy |
访问控制策略配置 |
ipAddressWhitelist |
白名单IP地址范围 |
enabled |
是否启用该策略 |
表格:访问控制策略类型
| 策略类型 | 类名 | 功能描述 |
|---|---|---|
| 默认策略 | DefaultRegisteredServiceAccessStrategy |
支持IP、角色控制 |
| 多因素认证策略 | RegisteredServiceMultiFactorPolicy |
强制MFA认证 |
| 属性策略 | RegisteredServiceAttributeReleasePolicy |
基于用户属性控制访问 |
4.4.2 属性释放策略的配置与管理
属性释放策略决定了认证成功后CAS向服务端释放哪些用户信息(如用户名、邮箱、手机号等)。
示例:配置属性释放策略
{
"attributeReleasePolicy" : {
"@class" : "org.jasig.cas.services.ReturnAllowedAttributeReleasePolicy",
"allowedAttributes" : [ "java.util.HashSet", [ "username", "email", "givenName" ] ]
}
}
参数说明:
| 参数 | 描述 |
|---|---|
@class |
属性释放策略类名 |
allowedAttributes |
允许释放的属性列表 |
逻辑分析:
- 使用
ReturnAllowedAttributeReleasePolicy策略,表示仅释放指定属性。 - 若使用
ReturnAllAttributeReleasePolicy,则释放所有用户属性。 - 属性释放策略应根据服务需求进行配置,避免泄露敏感信息。
表格:常用属性释放策略
| 策略类名 | 功能描述 |
|---|---|
ReturnAllAttributeReleasePolicy |
释放所有用户属性 |
ReturnAllowedAttributeReleasePolicy |
仅释放指定属性 |
RegisteredServiceRegexAttributeReleasePolicy |
按正则匹配释放属性 |
总结展望
本章系统讲解了CAS 4.2.7版本中服务注册的配置方式,包括静态文件注册与REST API动态注册,并深入分析了服务策略与属性释放机制。下一章将围绕客户端如何集成CAS认证流程展开,帮助开发者掌握从客户端接入到完整登录流程的实现方式。
5. 客户端集成CAS认证流程
CAS作为广泛使用的单点登录系统,其核心价值在于能够将多个客户端应用无缝集成到统一的认证体系中。本章将围绕CAS客户端的集成流程展开,涵盖Java Web应用、非Java应用(如PHP、Python)的集成方法,并详细分析客户端认证流程、配置方式及测试流程,帮助读者构建完整的CAS客户端集成能力。
5.1 客户端应用的认证集成
在CAS架构中,客户端应用(Service)是认证流程的发起者和验证者。它通过与CAS服务器交互,完成用户身份的认证与票据的获取。这一过程不仅涉及HTTP请求的交互逻辑,还包括票据的验证机制与安全策略的实施。
5.1.1 客户端如何与CAS服务器通信
CAS客户端与服务器之间的通信遵循标准的CAS协议流程,主要包括以下几个步骤:
- 用户访问受保护资源 :用户尝试访问客户端应用的受保护页面。
- 重定向至CAS登录页面 :客户端检测到用户未认证,将其重定向至CAS服务器的登录页面。
- 用户认证 :用户在CAS服务器输入用户名和密码进行认证。
- 获取Ticket Granting Ticket(TGT) :认证成功后,CAS服务器创建TGT并返回一个Service Ticket(ST)。
- 客户端验证ST :客户端通过后端服务向CAS服务器验证ST的合法性。
- 建立本地会话 :若验证通过,客户端创建本地会话,允许用户访问受保护资源。
CAS客户端与服务器通信流程图
graph TD
A[用户访问受保护页面] --> B{已认证?}
B -- 否 --> C[重定向至CAS登录页面]
C --> D[用户输入凭证]
D --> E[认证成功]
E --> F[生成TGT和ST]
F --> G[重定向回客户端并携带ST]
G --> H[客户端后端验证ST]
H --> I{ST有效?}
I -- 是 --> J[建立本地会话]
I -- 否 --> K[拒绝访问]
B -- 是 --> L[允许访问]
5.1.2 客户端认证流程的完整步骤
CAS客户端的认证流程是一个标准的Web单点登录过程,主要包括以下几个阶段:
- 访问受保护资源 :用户访问客户端应用的受保护URL。
- 重定向至CAS登录页 :客户端未检测到有效会话,重定向至CAS登录页面。
- 用户登录CAS :用户在CAS页面输入用户名和密码。
- 获取Service Ticket :认证成功后,CAS服务器生成ST并返回给客户端。
- 验证Service Ticket :客户端应用将ST发送至CAS服务器的验证接口进行验证。
- 获取用户信息 :CAS返回用户信息,客户端创建本地会话。
- 访问受保护资源 :用户成功访问受保护内容。
在整个流程中,ST的验证是关键步骤,它确保了用户身份的真实性和安全性。
5.2 Java Web应用集成CAS客户端
Java Web应用是CAS最常见的客户端类型之一。本节将详细介绍如何通过配置和代码集成CAS客户端。
5.2.1 引入CAS客户端依赖
在Maven项目中,可通过以下方式引入CAS客户端依赖:
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.6.2</version>
</dependency>
该依赖提供了CAS客户端的核心功能,包括过滤器、Ticket验证器等。
依赖说明:
cas-client-core:CAS客户端核心库,提供基础的过滤器和验证逻辑。- 版本3.6.2为目前广泛使用的稳定版本,兼容CAS 4.2.7服务器。
5.2.2 配置web.xml与Spring配置文件
在 web.xml 中配置CAS客户端的核心过滤器:
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://cas.example.com/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://client.example.com</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上述配置说明:
casServerLoginUrl:CAS服务器的登录地址。serverName:客户端应用的域名,用于生成重定向URL。
Spring配置(可选):
若项目使用Spring Security,可通过配置类集成CAS:
@Configuration
@EnableWebSecurity
public class CasSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.cas()
.loginUrl("https://cas.example.com/cas/login")
.serviceProperties(serviceProperties());
}
@Bean
public ServiceProperties serviceProperties() {
ServiceProperties sp = new ServiceProperties();
sp.setService("https://client.example.com/login/cas");
sp.setSendRenew(false);
return sp;
}
}
5.3 非Java客户端的集成方法
除了Java应用,CAS也支持多种非Java语言编写的客户端应用,如PHP、Python等。本节将以PHP和Python为例,介绍其集成方式。
5.3.1 PHP应用集成CAS认证
PHP应用可使用官方推荐的 phpCAS 库进行集成。
安装phpCAS:
composer require jasig/php-cas
基本使用示例:
require_once 'vendor/autoload.php';
phpCAS::client(CAS_VERSION_2_0, 'cas.example.com', 443, '/cas');
phpCAS::setNoCasServerValidation(); // 测试环境可不验证证书
phpCAS::forceAuthentication();
echo 'Hello, ' . phpCAS::getUser();
说明:
phpCAS::client():初始化CAS客户端。phpCAS::setNoCasServerValidation():在测试环境中跳过SSL证书验证。phpCAS::forceAuthentication():强制用户认证,未认证则跳转至CAS登录页。
5.3.2 Python应用集成CAS认证
Python应用可使用 flask-cas 库进行集成(适用于Flask框架)。
安装:
pip install flask-cas
Flask集成示例:
from flask import Flask
from flask_cas import CAS
app = Flask(__name__)
app.config['CAS_SERVER'] = 'https://cas.example.com/cas'
app.config['CAS_AFTER_LOGIN'] = 'index'
cas = CAS(app)
@app.route('/')
def index():
if cas.username:
return f'Hello, {cas.username}'
else:
return 'Not logged in'
if __name__ == '__main__':
app.run()
说明:
CAS_SERVER:CAS服务器地址。CAS_AFTER_LOGIN:认证成功后的跳转路径。cas.username:获取当前登录用户名。
5.4 客户端的登录与登出流程测试
完成客户端集成后,需对登录与登出流程进行完整测试,以确保认证流程的完整性与安全性。
5.4.1 测试登录流程的完整性
测试步骤:
- 清除浏览器会话,访问客户端应用的受保护页面。
- 检查是否被重定向至CAS登录页面。
- 输入有效凭证,提交登录。
- 检查是否成功跳回客户端应用,并显示用户信息。
- 查看日志文件,确认ST验证成功。
预期结果:
- 用户成功登录,显示用户名。
- CAS服务器返回有效ST,客户端验证成功。
5.4.2 注销流程的配置与验证
CAS支持全局注销(Single Logout),即注销一个应用时,会通知CAS服务器注销所有相关应用的会话。
配置注销流程:
在Java Web应用中,需配置 SingleSignOutFilter :
<filter>
<filter-name>CAS Single Sign Out Filter</filter-name>
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Single Sign Out Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
测试步骤:
- 登录客户端应用。
- 访问CAS注销页面:
https://cas.example.com/cas/logout - 检查是否跳转至注销成功页面。
- 尝试再次访问客户端应用,确认是否跳转至登录页。
预期结果:
- 注销后,客户端会话被清除。
- 再次访问客户端应用时,需重新登录。
本章详细介绍了CAS客户端的集成流程,涵盖Java Web应用与非Java应用的集成方式,并通过配置文件与代码示例说明了具体实现方式。同时,通过流程图、表格、代码块等形式,帮助读者深入理解CAS客户端的认证机制与测试方法,为后续的扩展与优化打下坚实基础。
6. 双向认证互信机制实现
在现代企业级身份认证体系中,单向认证(即客户端验证服务器)已经无法满足对高安全性的需求。为了提升系统间通信的可信度与安全性, 双向认证(Mutual Authentication) 成为保障服务间互信的重要机制。本章将深入解析在 CAS 4.2.7 中实现双向认证的具体流程与技术细节,涵盖 SSL/TLS 基础知识、客户端证书配置、Tomcat 的双向 SSL 配置、以及完整的集成示例。
6.1 双向认证的基本原理
双向认证,又称为相互认证(Mutual TLS, mTLS),是指客户端和服务器在建立 SSL/TLS 连接时, 双方都需验证对方的身份 。这种机制不仅确保客户端访问的是合法的服务器,也确保服务器接收的请求来自合法的客户端。
6.1.1 SSL/TLS 与客户端证书验证
SSL/TLS 是现代加密通信的基础协议,它通过数字证书来验证身份并加密通信内容。传统的 HTTPS 通信中,客户端验证服务器证书即可完成连接。而在双向认证中,服务器也会要求客户端提供证书进行验证。
- 服务器证书 :用于标识服务器身份。
- 客户端证书 :用于标识客户端身份,由受信任的 CA 签发。
- 信任链 :服务器和客户端都需信任对方的证书颁发机构。
6.1.2 CAS 服务器与客户端之间的信任建立
在 CAS 体系中,双向认证通常用于服务端与客户端之间的安全通信,例如:
- CAS 客户端应用与 CAS 服务器之间的 Ticket 验证;
- CAS 服务注册中心与服务客户端之间的注册通信;
- CAS 与其他系统(如 LDAP、OAuth 提供商)之间的通信。
建立信任关系的关键在于证书的签发与导入。下图展示了双向认证的基本流程:
sequenceDiagram
participant Client
participant Server
Client->>Server: 发起 HTTPS 请求
Server-->>Client: 请求客户端证书
Client->>Server: 提供客户端证书
Server->>Server: 验证证书合法性
alt 验证成功
Server-->>Client: 建立加密连接
else 验证失败
Server-->>Client: 拒绝连接
end
6.2 配置 CAS 服务器支持双向认证
要在 CAS 4.2.7 中启用双向认证,需完成以下步骤:
- 生成客户端证书;
- 导入客户端证书到服务器的信任库;
- 修改 Tomcat 配置以启用双向 SSL;
- 配置 CAS 相关属性以启用客户端证书验证。
6.2.1 生成与导入客户端证书
使用 keytool 或 openssl 生成客户端证书并导入服务器信任库:
# 生成客户端私钥和证书请求
keytool -genkeypair -alias client -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore client.p12 -validity 3650
# 导出客户端证书
keytool -exportcert -alias client -keystore client.p12 -storetype PKCS12 -rfc -file client.crt
# 导入客户端证书到服务器的信任库(cacerts)
keytool -importcert -alias client -file client.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
参数说明 :
--alias:证书别名;
--keystore:密钥库路径;
--storetype:密钥库类型(PKCS12 适用于跨平台);
--validity:证书有效期(天数);
--rfc:导出为 PEM 格式。
6.2.2 配置 Tomcat 启用双向 SSL
编辑 Tomcat 的 server.xml 文件,配置 SSL Connector 并启用双向认证:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/keystore.p12"
certificateKeystorePassword="changeit"
certificateKeystoreType="PKCS12"
type="RSA" />
<TrustManager truststoreFile="conf/cacerts.p12"
truststorePassword="changeit"
truststoreType="PKCS12"/>
<SSLHostConfig clientAuth="true" sslProtocol="TLS"/>
</SSLHostConfig>
</Connector>
参数说明 :
-certificateKeystoreFile:服务器证书密钥库;
-truststoreFile:信任库文件;
-clientAuth="true":启用客户端证书验证;
-sslProtocol="TLS":使用 TLS 协议。
6.3 客户端证书认证的集成实践
在实际应用中,CAS 客户端应用需要配置使用客户端证书,并确保能与 CAS 服务器完成双向认证流程。
6.3.1 客户端证书在 CAS 中的验证流程
CAS 服务器在接收到客户端请求时,会执行以下验证步骤:
- 证书合法性验证 :检查客户端证书是否由信任的 CA 签发;
- 证书吊销检查 :通过 CRL 或 OCSP 检查证书是否被吊销;
- 证书用途检查 :确保证书的 Key Usage 和 Extended Key Usage 支持客户端认证;
- 身份映射 :将客户端证书中的 DN(Distinguished Name)映射为 CAS 用户名。
6.3.2 实现双向认证的完整示例
以 Java Web 应用为例,展示如何配置客户端使用证书访问 CAS 服务:
示例代码:使用 Java 客户端访问双向认证的 CAS 服务
import javax.net.ssl.*;
import java.io.*;
import java.security.*;
public class MutualAuthClient {
public static void main(String[] args) throws Exception {
// 加载客户端证书
KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(new FileInputStream("client.p12"), "clientpass".toCharArray());
// 初始化 KeyManagerFactory
KeyManagerFactory kmf = KeyManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(clientStore, "clientpass".toCharArray());
// 加载信任库
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream("cacerts"), "changeit".toCharArray());
// 初始化 TrustManagerFactory
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
// 初始化 SSLContext
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
// 创建 HTTPS 连接
URL url = new URL("https://cas.example.com:8443/cas/v1/tickets");
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(sslContext.getSocketFactory());
conn.setRequestMethod("GET");
// 读取响应
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
代码解析 :
-KeyStore:加载客户端证书和信任库;
-KeyManagerFactory:用于管理客户端私钥;
-TrustManagerFactory:用于验证服务器证书;
-SSLContext:构建 SSL 上下文;
-HttpsURLConnection:发起 HTTPS 请求。
执行逻辑说明:
- 客户端加载自己的私钥和证书;
- 加载信任库以验证服务器证书;
- 使用 SSLContext 构建 HTTPS 请求;
- 向 CAS 服务器发起请求并读取响应。
6.4 互信机制的安全策略与管理
双向认证机制虽然提升了安全性,但同时也引入了证书生命周期管理、吊销机制、安全审计等挑战。本节将介绍如何构建一套完整的互信机制安全管理策略。
6.4.1 证书吊销与更新机制
为防止证书泄露或失效,需建立证书吊销机制:
- CRL(Certificate Revocation List) :由 CA 发布的吊销列表;
- OCSP(Online Certificate Status Protocol) :实时查询证书状态。
CAS 支持通过以下方式配置 CRL/OCSP 检查:
# application.properties 配置
cas.standalone.configuration-security-crl-enabled=true
cas.standalone.configuration-security-crl-location=file:/etc/cas/crl.pem
cas.standalone.configuration-security-ocsp-enabled=true
cas.standalone.configuration-security-ocsp-responder-url=http://ocsp.example.com
建议 :定期更新 CRL 并配置 OCSP 服务器以提高实时性。
6.4.2 安全审计与日志分析
双向认证过程中的异常事件(如证书验证失败、非法访问)应被记录并分析:
- 日志记录 :启用 SSL 调试日志;
- 审计系统集成 :将认证日志发送至 SIEM 系统(如 ELK、Splunk);
- 自动化告警 :通过日志分析发现异常行为并触发告警。
示例日志内容:
INFO o.a.coyote.http11.Http11NioProtocol - TLS handshake failed: client certificate rejected.
WARN o.j.s.s.m.MutualAuthenticationFilter - Failed to authenticate client certificate: CN=unknown.example.com
建议 :结合日志分析工具,监控客户端证书的使用频率、来源 IP、异常登录行为等。
小结
本章详细讲解了 CAS 4.2.7 中如何实现双向认证互信机制。从 SSL/TLS 的基本原理出发,逐步引导读者完成证书生成、Tomcat 配置、客户端集成等关键步骤,并通过代码示例演示了 Java 客户端如何使用证书访问 CAS 服务。最后,介绍了证书吊销、更新机制以及安全审计策略,确保双向认证机制在生产环境中的稳定性与安全性。
后续章节建议 :下一章将继续探讨 HTTPS 通信的配置与安全加固,进一步提升 CAS 服务的整体安全性。
7. HTTPS安全通信配置
在现代Web应用中,HTTPS已成为保障数据传输安全的基础协议。本章将围绕CAS服务器的HTTPS通信配置展开,详细介绍HTTPS的基本概念、服务器端和客户端的配置步骤,以及如何进一步加固HTTPS通信的安全性。
7.1 HTTPS协议的基础知识
7.1.1 什么是HTTPS?
HTTPS(HyperText Transfer Protocol Secure)是HTTP协议的安全版本,通过SSL/TLS协议对数据进行加密传输,防止中间人攻击(MITM),确保客户端与服务器之间的通信安全。
HTTPS的核心机制包括:
- 加密传输 :使用对称加密算法(如AES)加密传输数据。
- 身份验证 :通过数字证书验证服务器身份。
- 完整性校验 :使用消息认证码(MAC)确保数据未被篡改。
7.1.2 HTTPS与HTTP的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 协议类型 | 明文传输 | 加密传输 |
| 端口 | 默认80 | 默认443 |
| 安全性 | 不安全 | 安全 |
| 是否需要证书 | 否 | 是 |
| SEO优化支持 | 不友好 | 友好 |
| 性能影响 | 较低 | 因加密解密稍有性能损耗 |
HTTPS的引入不仅提升了安全性,也符合现代浏览器对网站安全性的要求,有助于提升用户信任度和SEO排名。
7.2 配置CAS服务器的HTTPS通信
7.2.1 生成服务器证书并导入密钥库
在Java环境中,密钥库(keystore)是存储SSL证书的文件。我们可以使用 keytool 工具生成自签名证书用于测试。
keytool -genkeypair -alias cas -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore cas.p12 -validity 3650
执行命令后,系统会提示你设置密钥库密码、组织信息等。生成的 cas.p12 文件将作为服务器证书使用。
接下来,将该证书导入Tomcat的SSL配置中。
7.2.2 修改Tomcat配置文件启用SSL
编辑Tomcat的 conf/server.xml 文件,找到或新增以下SSL连接器配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/cas.p12"
type="RSA"
certificateKeystorePassword="your_keystore_password"
certificateKeystoreType="PKCS12"/>
</SSLHostConfig>
</Connector>
其中:
certificateKeystoreFile:证书文件路径。certificateKeystorePassword:密钥库密码。certificateKeystoreType:密钥库类型(PKCS12或JKS)。
配置完成后,重启Tomcat服务。
7.3 客户端与服务器之间的HTTPS通信
7.3.1 客户端访问CAS的HTTPS地址
客户端应用在配置CAS认证时,需确保使用HTTPS地址进行访问。例如,在Java应用的 web.xml 中配置:
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
<init-param>
<param-name>casServerLoginUrl</param-name>
<param-value>https://cas.example.com:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value>https://client.example.com</param-value>
</init-param>
</filter>
这里使用了HTTPS协议访问CAS服务器,确保认证流程的安全性。
7.3.2 验证通信过程中的加密机制
使用浏览器访问CAS登录页面,点击锁图标查看证书信息,确保证书有效且加密协议为TLS 1.2或更高版本。
也可以使用 curl 命令查看SSL握手细节:
curl -I --insecure https://cas.example.com:8443/cas
注意: --insecure 参数用于跳过证书验证(测试环境可用),生产环境应避免使用。
7.4 HTTPS通信的安全加固
7.4.1 禁用不安全的SSL/TLS版本
在 server.xml 的SSL配置中,可以指定启用的SSL/TLS版本:
<SSLHostConfig protocols="TLSv1.2+TLSv1.3">
<Certificate ... />
</SSLHostConfig>
禁用不安全的旧版本(如SSLv3、TLSv1.0、TLSv1.1)可以有效防止POODLE、BEAST等攻击。
7.4.2 配置HSTS头提升安全性
HTTP Strict Transport Security(HSTS)是一种安全策略机制,强制浏览器通过HTTPS访问网站,防止降级攻击。
在Tomcat中,可以通过修改 web.xml 添加HSTS响应头:
<filter>
<filter-name>HttpHeaderSecurityFilter</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
<init-param>
<param-name>hstsEnabled</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>hstsMaxAgeSeconds</param-name>
<param-value>31536000</param-value>
</init-param>
<init-param>
<param-name>hstsIncludeSubDomains</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>HttpHeaderSecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上述配置表示:
hstsMaxAgeSeconds:浏览器强制HTTPS访问的持续时间(秒)。hstsIncludeSubDomains:是否包含子域名。
启用HSTS后,浏览器会缓存该策略,即使用户输入HTTP地址,也会自动重定向到HTTPS。
本章从HTTPS的基础概念入手,逐步介绍了CAS服务器的HTTPS配置流程,包括证书生成、Tomcat配置、客户端访问方式以及安全加固措施。下一章将深入探讨CAS中的多因素认证机制,进一步提升身份验证的安全等级。
简介:CAS(Central Authentication Service)是一个开源的单点登录解决方案,支持用户在多个系统间统一认证。本文档基于CAS 4.2.7版本,详细讲解如何实现其他系统与CAS之间的双向认证互信。内容涵盖CAS服务器部署、协议配置、服务注册、客户端集成、票证验证、安全通信、日志监控等关键步骤,适用于需要构建SSO环境的Web项目。通过解压并整合提供的web项目包,可快速完成配置并实现系统间的互信认证。
更多推荐





所有评论(0)