Kerberos


简介

Kerberos是一种验证机制,最先由MIT提出和实现,之后被运用到windows的认证机制中。

Windows是从windows 2000时才开始将Kerberos作为默认首选验证方式,先前使用的是一种叫做NTLM(challenge-response)的验证机制。

Kerberos采用对称密钥体制对信息进行加密。其基本思想是:能正确对信息进行解密的用户就是合法用户。用户在对应用服务器进行访问之前,必须先从第三方(Kerberos服务器)获取该应用服务器的访问许可证(ticket)。

Kerberos这个词本身源自希腊神话,意指地狱看门犬,守卫在冥界的入口处。它有三个头,在很多游戏中都有出现。这个形象本身也与这种验证机制有些相像,在客户端访问服务端的服务之前做认证,并且这个机制一般至少涉及到三个节点之间的信息传输。


 

节点功能

Kerberos验证机制是使用在域环境中的。简单来说,它的功能就是要让正确的域用户访问到正确的域内服务。因此,首先需要域账户和域内服务均在域的管理员机器DC(DomainController,可以将其视为验证过程中的一个中枢)中进行过登记和注册,这样,DC便持有域账户和域内服务的一些关键信息,用于之后用户和service的身份认证。

 

1.        客户端C(Client)

a)        服务的请求者,提供用户账号和所请求的服务信息,唯一持有过用户密码的明文;

b)        使用正确的key对session消息进行加解密;

c)        完成Ticket的传递;

d)        协助DC完成认证并最终与Service建立起session;

2.        域管理员DC(DomainController)

a)        AS(AuthenticationServer)

                        i.             DC中的一个服务角色,存放有Kerberos数据库的一个只读副本,其中包括账号对应的密码hash值(KC),TGS的密钥(Ktgs),主要负责对域账号的认证;

                      ii.             对Client进行域账号认证,如果正确,则为Client提供继续访问的TGT(Ticket-GrantingTicket)

b)       TGS(Ticket-GrantingService)

                        i.             DC中的另一个服务角色,存放有Kerberos数据库的一个只读副本,包含ServicePrincipal Name(SPN)和Service密钥(KS),主要负责对Service的验证,确保Client能访问到正确的Service;

                      ii.             根据Client发送来的SPN(ServicePrincipal Name),验证其有效性,如果正确,

则为Client生成一个支持它继续访问Service的请求票据(Service-GrantingTicket?)。

3.        服务端S(Service)

a)        响应客户端服务请求的最终站,提供某种服务如SQL Server,Exchange等。

b)        必须在DC上注册过SPN才能委托DC的Kerberos认证机制为其进行账号认证。


 

认证过程


1.        C==>AS

a)        客户端向DC的AS发起请求KER_AS_REQ

KER_AS_REQ主要包括 {IDc, TS1, IDtgs }

ICC                      客户端标识


TS                时间戳,用来控制会话时间,请求和响应间隔超过一定时间则会作废。

 

 

2.        AS==>C

a)        对Client进行域账号认证:
如果该账号存在,则得到该账号对应的密码hash值(KC),并对之后回传给Client的KRB_AS_RES进行加密,客户端能正确解密则说明用户正确并通过认证。

b)        为之后Client和TGS的会话创建一个随机的session_key(Kc/tgs):
这个Kc/tgs会通过一个双重加密的机制先后让正确的Client和TGS获得。

c)        为Client提供TGT(Ticket-GrantingTicket):
TGT主要包括 Ktgs{ Kc/tgs , IDc , IDtgs , TS2 ,Lifetime}
它是一个用于Client之后去访问TGS(Ticket-GrantingService)的加密票据,只有对应的TGS可以解密(通过TGS自己的密钥Ktgs)。因此Client不能解密,只能转发。

d)        用第一步中得到的密码hash值(KC)加密KRB_AS_RES,传回给Client
KRB_AS_RES主要包括:KC{Kc/tgs , TS2 ,Lifetime2 , TGT}

 

3.        C==>TGS

a)        客户端将TGT和请求服务的IDV(SPN)以及一些用于完成认证的信息发给TGS

b)        KRB_TGS_REQ主要包括 {IDV , TGT , AuthenticatorC }
AuthenticatorC主要包括 KC/TGS{IDC, ADC , TS3}


4.        TGS==>C

a)        接收和解密TGT(用自己的Ktgs),由此完成之前AS对TGS的认证

b)        获得KC/TGS,并用它解密AuthenticatorC

c)        比较TGT和AuthenticatorC中的IDC和ADC确认Client已被AS认证;

d)        通过IDV验证其有效性,若有,得到它的密钥KS

e)        为Client提供SGT(Service-GrantingTicket)?:
SGT主要包括Ks{ Kc/s , IDc, IDs , TS4 ,Lifetime}
它是一个用于Client之后去访问Service的加密票据,只有对应的Service可以解密(通过TGS自己的密钥Ks)。因此Client不能解密,只能转发。

f)         为之后Client和Service的会话创建一个随机的session_key(Kc/s):
这个Kc/s会通过一个双重加密的机制先后让正确的Client和Service获得。

g)        用之前得到的Service密钥(KS)加密KRB_AP_RES,传回给Client
KRB_TGS_RES主要包括:Kc/tgs{ Kc/s , IDV ,TS4 , Lifetime4 , SGT}

 

5.        C==>S

a)        客户端将SGT和一些用于完成认证的信息发给Service

b)        KRB_AP_REQ主要包括 {SGT , AuthenticatorC2 }
AuthenticatorC2主要包括 KS{IDC , ADC, TS5}


6.        S==>C

a)        接收和解密SGT(用自己的Ks),由此完成之前TGS对Service的认证;

b)        获得KC/S,并用它解密AuthenticatorC2

c)        比较SGT和AuthenticatorC2中的IDC和ADC确认Client已被认证;

d)        如果一切正常,便与Client建立会话,至此,Kerberos的认证结束。


 

优缺点

优点

l  密码不用在网络上传递。

l  支持相互身份认证,即任意两台服务器之间都可以认证身份,Kerberos为客户端提供网络上恶意代码不会模拟该服务的保证。

l  支持委派身份认证(delegation)。

l  AS的域账号认证在生命周期内是可持续的(durable)和可重用的(resuable)

缺点

l  Kerberos中的AS(身份认证服务)和TGS是集中式管理,容易形成瓶颈,系统的性能和安全也严重依赖于AS和TGS的性能和安全。

l  Kerberos最初是基于单用户系统(single-user clientsystems)设计的认证机制,而如今越来越多的系统需要支持多用户multi-user system。Kerberos在multi-user system中的安全性和性能方面的整体表现会有一定缺陷。

 

### Kerberos 协议的实现与使用 Kerberos 是一种网络认证协议,旨在通过票据授予机制提供强大的身份验证功能。它基于对称密钥加密技术,在客户端和服务端之间建立信任关系。以下是关于 Kerberos 实现和使用的详细介绍: #### 1. 基本工作原理 Kerberos 使用三个主要实体完成身份验证过程:客户端、服务端以及 Key Distribution Center (KDC)[^1]。KDC 又分为两个部分:Authentication Server (AS) 和 Ticket Granting Server (TGS)。 - **第一步**: 客户端向 AS 请求 TGT (Ticket Granting Ticket),并使用自己的密码派生出的密钥解密响应中的会话密钥。 - **第二步**: 客户端利用获得的 TGT 向 TGS 请求特定服务的访问权限。 - **第三步**: TGS 返回给客户端一个用于目标服务的身份验证票证,该票证由服务共享密钥保护。 - **第四步**: 客户端携带此票证联系实际的服务提供商以获取所需资源[^1]。 #### 2. 配置与部署注意事项 当在 Hadoop 或其他分布式系统中启用 Kerberos 支持时,需注意以下几点配置事项: - 每个集群节点上的每个 Hadoop 组件都需要独立的 Kerberos 主体账号及其对应的 keytab 文件[^1]。 - 推荐不同组件采用各自专属账户启动,但在伪分布模式下可简化操作流程,统一使用单一主体(如 `root` 用户)管理整个环境下的所有进程实例。 #### 3. Java 中的应用场景举例 对于 Kafka 这样的消息队列工具而言,Spring Cloud Stream 提供了一套灵活易用的抽象层来集成各种中间件解决方案;其中针对消费者属性设置了专门前缀以便区分生产者设置项[^2]。如果计划引入 Kerberos 来增强安全性,则需要额外调整相关参数确保双方能够正常通信交互数据包而不会因为缺乏适当授权而导致失败。 #### 4. 故障处理建议 考虑到内存泄漏可能引发性能下降甚至崩溃风险,因此强烈建议预先定义好 JVM 参数选项使得一旦检测到 OOM 错误即刻终止当前线程执行路径同时记录堆栈信息便于后续排查定位根本原因所在位置[^4]。 ```bash # Example command line argument for enabling OOME handling in Zookeeper's startup script. JAVA_OPTS="-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dumps" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值