Keberos安全认证学习

本文深入探讨Kerberos网络认证协议,包括其角色概念、认证过程和在Hadoop安全机制中的应用。Kerberos通过TGT(Ticket Granting Ticket)和会话密钥确保用户和服务间安全通信。在Hadoop中,Delegation Tokens作为轻量级认证机制,用于减轻KDC的压力。理解Kerberos ticket和Hadoop token的生命周期对于管理认证至关重要。

因为,最近要做大数据组件的安全认证,需要涉及到kerberos这个组件,记录相关资料,后续查看。

Kerberos 是一种网络认证协议,它采用了传统的共享密钥的方式,实现了在网络环境不一定保证安全的环境下,client和server之间的通信,适用于client/server模型。用户只需输入一次身份验证信息,就可凭借此验证获得的票据授予票据(ticket-granting ticket)访问多个接入Kerberos的服务。

                                              

                                                                          图 1.1 Kerberos认证

Kerberos角色概念:

  1. AS(Authentication Server):认证服务器。KDC的一部分。通常会维护一个包含安全个体及其秘钥的数据库,用于身份认证
  2. KDC(Key Distribution Center):密钥分发中心。,是一个提供票据(tickets)和临时会话密钥(session keys)的网络服务。KDC服务作为客户端和服务器端信赖的第三方,为其提供初始票据(initial ticket)服务和票据授予票据(ticket-granting ticket)服务,前半部分有时被称为AS,后半部分有时则被称为TGS。
  3. TGT(Ticket Granting Ticket):票据授权票据,票据的票据。包含客户端ID、客户端网络地址、票据有效期以及client/TGS会话密钥(TGT是和Server无关的)
  4. TGS(Ticket Granting Server):票据授权服务器。KDC的一部分,根据客户端传来的TGT发放访问对应服务的票据
  5. SS(Service Server):特定服务提供端
  6. Principal:被认证的个体。(client principal/server principal: 分别表示客户端和服务器的名字,命名规则:主名称+实例+领域。例如:admin/admin@ZELDA.COM
  7. Ticket:票据,客户端用它访问对应服务。包含:用户名,IP,时间戳,有效期,会话秘钥
  8. Session key:会话密钥,指两个安全个体之间使用的临时加密秘钥,其时效性取决于单点登录的会话时间长短
  9. Keytab:以文件的形式呈现,存储了一个或多个Principal的长期的key。用途和密码类似,用于kerberos认证登录(让用户不需要明文的存储密码,和程序交互时不需要人为交互来输入密码)

认证过程

 开启安全认证后的认证方式有两种:

  • 使用密码认证:

使用用户密码通过kinit认证, 获取到的TGT存在本地凭证缓存当中, 供后续访问服务认证使用。一般在交互式访问中使用。

  • 使用 keytab 认证:

用户通过导出的keytab 可以免密码进行用户认证, 后续步骤一致。一般在应用程序中配置使用。

Kerberos的认证过程可细分为三个阶段:初始验证、获取服务票据和服务验证:

第一阶段主要是客户端KDC中的AS发送用户信息,以及请求TGT

  • 客户端向KDC发送自己身份,即提供用户名密码(避免频繁使用用户名密码,可以使用keytab这个密码本);
  • AS收到请求后,随机生成一个密码Session Key,简称为SK1(使用客户端的Master Key自己的Master Key进行加密),并返回给客户端两条消息:a)一个给客户端,b)另一个给TGS
  • 客户端通过自己的Master Key对第一部分进行解密获得SK1之后,以及TGS的密钥加密的TGT 。

TGT大体又包含以下的内容:

  • SK1:只在一段时间内有效的Short-term Key
  • End time: TGT到期的时间。
  • Client name & realm: 简单地说就是Domain name\Client;

                                

                                                                          1.2初始验证流程图

第二阶段客户端拿到之前获得的TGT(一个TGT可以从KDC获得基于不同Server的Ticket)向KDC中的TGS请求访问某个服务的票据

  1. 客户端在获得自己和KDC的SK1之后,生成自己的A       uthentication以及要访问的Server名称,并使用Session Key进行加密,连同TGT一同发送给KDC;
  2. KDC中的TGS首先检查KDC数据库中是否存在所需服务,若存在则使用自己的Master Key对TGT进行解密,提取客户端信息(Client Info)和SK1,然后,使用这个SK1解密Authenticator获得Client Info,对两个Client Info进行对比,进行身份验证。
  3. 若验证通过,TGS则使用SK1对客户端和服务端
Java Kerberos 是一个在 Java 平台上实现的网络认证协议,它使用密钥分发中心(KDC)来实现双方认证与密钥分发。Kerberos 协议旨在提供强大的身份验证和加密通信,可以保护网络中的数据传输安全。 Java Kerberos 提供了 Kerberos 客户端和 Kerberos 服务端的 API,使得开发人员可以使用 Java 语言轻松地实现 Kerberos 协议的集成。通过 Java Kerberos,我们可以在 Java 应用程序之间进行安全的身份验证和通信。 使用 Java Kerberos,首先需要进行以下步骤: 1. 安装与配置 Kerberos 服务端:要使用 Java Kerberos,需要安装和配置一个 Kerberos 服务端,这个服务端将负责生成并验证 Kerberos TGT(票据授权票)和服务票据。 2. 配置 Java 客户端:在 Java 应用程序中,需要配置 Kerberos 客户端以连接到 Kerberos 服务端。配置包括指定 KDC 的主机名和端口号,以及指定 Realm(领域)。 3. 实现 Kerberos 认证逻辑:在 Java 应用程序代码中,需要集成 Kerberos API,并实现认证逻辑。这些逻辑包括: - 客户端请求 TGT:客户端向 Kerberos 服务端发送身份验证请求,获取 TGT。 - 客户端使用 TGT 请求服务票据:客户端使用 TGT 向 Kerberos 服务端请求服务票据,这会导致服务票据被返回给客户端。 - 服务端验证票据:服务端接收到客户端发送的服务票据请求,对票据进行验证,并向客户端发送成功或失败的响应。 4. 安全通信:一旦身份验证和票据交换完成,Java 应用程序间就可以使用安全的通信协议(如 SSL/TLS)进行加密通信。 总之,Java Kerberos 提供了一种保护网络通信的强大工具,开发人员可以利用 Java Kerberos API 在 Java 应用程序中轻松地实现 Kerberos 认证和安全通信。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值