Kerberos安全认证-连载1-Kerberos简介

目录

1.数据安全防护

​​​​2.什么是Kerberos

3.Kerberos认证原理

3.1 加密

3.2 Kerberos认证流程

4.Kerberos优势


1.数据安全防护

用户在访问大数据集群数据时会有如下几个维度的安全防护方式来保证访问数据的安全:

  • 边界安全(Perimeter Security):如设置防火墙、安全组控制端口。
  • 认证(Authentication):大数据集群中组件服务开启身份认证功能,只有用户提供了合法的身份信息才有可能访问服务,它是后续授权的基础,没有身份认证的授权是有漏洞容易被冒充的。例如:任意连接到HDFS系统的用户都可以查看HDFS 中的数据,设置是可以操作HDFS中的数据,存在安全问题。
  • 授权(Authorization):通过身份认证的用户并不能访问服务所有的资源,需要通过授权机制对用户访问服务中实际的资源进行控制。例如通过ranger对访问Hive的用户进行授权限制用户访问Hive表中的哪些数据。
  • 审计(Audit):用户对服务资源的访问,需要利用审计日志进行监控/跟踪,便于问题/风险的排查。
  • 加密(Encrypt):涉及数据传输加密/数据存储加密,防止数据被窃取/窃取后被破解等。

以上边界安全主要是针对企业大数据集群节点的防火墙和安全组端口控制,避免非法访问和操作集群数据,边界安全假设“坏人”在外面,这通常是一个非常糟糕的假设,大多数真正具有破坏性的计算机犯罪事件都是内部人员所为,所以对于可以访问集群节点的人员还需进一步认证;认证主要是针对通过边界安全维度后进行用户身份的确认,认证有很多形式,如服务组件自身提供了简单的用户名/密码认证方式、通过Kerberos认证服务对用户身份进行认证;为了更好细粒度控制通过认证用户访问的资源可以通过对用户授权方式来决定用户操作资源的权限,这就是授权;最终操作集群资源时可以对数据进行加密传输,所有操作都会通过审计日志进行记录,便于风险排查。

针对认证(Authorization)部分,目前大数据企业比较通用的是使用Kerberos协议,集群上启动的多个服务组件可以通过使用同一个第三方的Kerberos认证服务,对用户进行身份认证,例如大数据中HDFS默认安全认证的方式就采用的是Kerberos认证协议。

​​​​2.什么是Kerberos

Kerberos 是一种网络身份验证协议,Kerberos协议通过使用密钥加密为Client/Server应用程序提供强大的身份验证。不同于其他网络安全协议的保证整个通信过程的传输安全,Kerberos侧重于通信前双方身份的认定工作,帮助客户端以及服务端验证是真正的自己并非他人,从而使得通信两端能够完全信任对方的身份,在一个不安全的网络中完成一次安全的身份认证继而进行安全的通信。

Kerberos由麻省理工学院(MIT)研发实现,官网地址为:https://web.mit.edu/kerberos/,Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬,下图是 Kerberos 的 LOGO:

 

在大数据开发中,很多大数据组件都支持Kerberos身份认证,例如:HDFS、Yarn、Hive、HBase、Spark、Kafka等。

3.Kerberos认证原理

3.1 加密

为了更好理解Kerberos认证原理,需要首先对加密和数字证书概念进行理解。互联网通信中为了保证信息传输过程中数据的机密性可以对数据进行加密,加密又分为对称加密和非对称加密。

  • 对称加密:

对称加密是指加密和解密使用相同的密钥。发送方使用该密钥将明文转换为密文,接收方使用相同的密钥将密文还原为明文。这种方法的优点是加密和解密速度快,适用于大量数据的加密,但缺点是需要保护好密钥,因为密钥一旦泄露,所有的加密信息都将暴露。在Kerberos中信息加密方式默认就是对称加密。

常见的对称加密算法有:DES、AES、3DES等。

  • 非对称加密:

非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。 公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。例如:发送方使用接收方的公钥加密明文,接收方使用自己的私钥解密密文。这种方法的优势就是即使密文和公钥被拦截,但是由于无法获取到私钥,也就无法破译到密文,但缺点是加密和解密速度相对较慢,不适用于大量数据的加密。

常见的非对称加密算法有:RSA、ECC等。

3.2 Kerberos认证流程

整个Kerberos认证流程中涉及到三种角色:客户端Client、服务端Server、密钥分发中心KDC(Key Distribution Center)。

  • 客户端(Client):发送请求的一方。
  • 服务端(Server):接收请求的一方。
  • 密钥分发中心(Key Distribution Center,KDC):KDC是一个网络服务,提供ticket和临时会话密钥。由三个部分组成:认证服务器(Authentication Server,AS)、票证授予服务器(Ticket Grantion Server,TGS)、Kerberos数据库。
    • 认证服务器AS:认证服务器。负责认证客户端的身份并发放客户端访问TGS的TGT(Ticket Grantion Ticket,票据授予票据)。
    • 票证授予服务器TGS:票据授予服务器。用来发放客户端访问服务端所需的服务授予票据(ticket)。
    • Kerberos数据库:客户端和服务端添加进keberos系统时有对应的密钥,数据负责存储这些密钥,并保存客户端和服务端的基本信息,如:用户名、用户IP地址、服务端IP、服务端名称等。

Kerberos认证流程图如下:

 

Kerberos认证过程总体流程为:客户端向KDC请求要访问的目标服务器的服务授予票据(ticket),然后客户端拿着从KDC获取的服务授予票据(ticket)访问服务端。在以上这个过程中,需要保证客户端和服务端为正确的客户端和服务端,整个Keberos认证流程共有三次交互,如下:

1. 客户端向KDC AS获取TGT

为了获取访问服务端的服务授予票据,客户端首先向KDC中AS获取TGT(票据授予票据),客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问服务端所需的Ticket(服务授予票据)才能进一步的与服务端通信。

客户端首先向KDC以明文方式发起请求,该请求中携带了访问KDC的用户名、主机IP、当前时间戳。由于客户端是第一次访问KDC,KDC中AS(认证服务器)接收请求后,去Kerberos数据库中验证是否存在访问的用户名,这个过程不会判断身份的可靠性。如果没有该用户名,认证失败;如果存在该用户名,AS会返回两部分信息给客户端:

  • 第一部分信息为票据授予票据(TGT),TGT包含该客户端的名称、IP、当前时间戳、客户端即将访问TGS的名称、TGT的有效时间以及客户端与TGS之间通信的session_key(后续简称CT_SK),该key后续会用来对客户端向TGS发送的消息加密。

整个TGT使用TGS公钥加密,客户端是解密不了,后续客户端需要使用TGT去KDC中的TGS(票据授予中心)获取访问服务端所需的Ticket(服务授予票据)。

  • 第二部分信息是使用客户端公钥加密的信息,该信息包含客户端和TGS通信的session_key(CT_SK)、客户端将要访问TGS的名称、TGT的有效时间以及当前时间戳。该部分内容由于是使用客户端密钥进行加密,所以客户端拿到该部分内容可以使用自己私钥进行解密,如果这时数据被劫持到一个假的客户端,由于真正客户端的私钥没有在网络中传输过,所以假的客户端无法对这部分信息进行解密,认证流程就会中断。只有正确的客户端才能对这部分信息进行解密,这个过程相当于是对客户端进行认证。

2. 客户端向KDC TGS获取目标服务器的服务授予票据ticket

客户端收到了来自KDC AS 返回的两部分信息后,对第二部分信息进行解密,可以获取与TGS通信的session_key(CT_SK)、将要访问TGS的名称、时间戳。首先会检查时间戳是否与自己返送数据的时间戳相差5分钟,如果大于5分钟则认为该AS是假的,认证中断。如果时延合理,客户端便向TGS发起请求去获取要访问目标服务端的服务授予票据ticket。

客户端向KDC TGS请求的信息包括三部分:

  1. 客户端将要访问的服务端名称
  2. 客户端从KDC AS中获取的第一部分信息,即:使用TGS密钥加密的TGT,通过TGT客户端可以从TGS中获取访问服务器的服务授予票据ticket。
  3. 使用CT_SK加密的信息,包括客户端名称、IP、时间戳。

当KDC中的TGS收到了客户端的请求后,首先去Kerberos数据库中查询是否存在该服务端,如果不存在认证失败。如果存在,TGS会使用自己的私钥对TGT进行解密,从而获取到经过KDC AS 认证过的客户端信息、CT_SK、时间戳信息,TGS会根据时间戳判断此次通信是否超出时间延迟,如果正常,TGS会对客户端发送过来的加密信息(使用CT_SK加密的信息)进行解密,获取客户端名称、IP信息,如果这部分信息与TGT中的客户端信息一致,那么就确认客户端的身份正确,否则中断认证。

KDC TGS通过确认是对的客户端后,会将如下两部分信息返回给客户端:

  • 第一部分信息:客户端需要访问服务端需要的Server Ticket(服务授予票据,后续简称ST),该Ticket通过Server公钥进行加密,其中包括客户端名称、IP、需要访问的服务端的IP、ST有效时间、时间戳、用于客户端与服务端之间通信的session_key(后续简称CS_SK)。
  • 第二部分信息:使用CT_SK加密的内容,这些加密内容包括:CS_SK、时间戳、ST有效时间,由于客户端与AS通信时,AS已经将CT_SK私钥通过客户端公钥加密交给了客户端,客户端缓存了CT_SK,并能对该部分内容进行解密。

3. 客户端向服务端发送通信请求

当客户端收到来自KDC TGS的响应后,对第二部分内容进行解密,获取CS_SK、时间戳、ST有效时间,检查时间戳在时间延迟范围内,向服务端进行请求。

客户端会通过CS_SK将客户端名称、时间戳进行加密发送给服务端,此外还会将服务授予票据ST发送给服务端。

服务端收到来自客户端的请求,会使用自己私钥对ST进行解密获取信息(客户端名称、IP、需要访问的服务端的IP、ST有效时间、时间戳、用于客户端与服务端之间通信的CS_SK),将CS_SK取出对客户端发来的通过CS_SK加密的内容进行解密获取信息(客户端名称、时间戳),如果客户端信息一致说明该客户端是通过KDC认证的客户端,可以进一步提供服务,这时服务端返回通过CS_SK加密的接收请求信息给客户端,客户端接收到该请求后,使用缓存在客户端的CS_SK解密后,也确认了服务端身份,这个过程服务端还会通过数字证书证明自己身份。

以上3个步骤代表了整个kerberos认证的流程,通信的客户端和服务端都确认了双方的身份信息。这个过程使用了各方的密钥,且密钥的种类一直变化,为了防止网络拦截密钥,这些密钥都是临时生成的Session key,即它们只在一次Session会话中起作用,即使密钥被劫持,等到密钥被破解可能这次会话都早已结束,这为整个Kerberos认证过程保证了较高的安全性。

4.Kerberos优势

Kerberos具备如下三点优势:

  1. 密码无需进行网络传输。基于 Ticket 实现身份认证,保障密钥安全性。
  2. 双向认证。整个认证过程中,不仅需要客户端进行认证,待访问的服务也需要进行身份认证。
  3. 高性能。密钥采用对称加密方式,相比于SSL的密钥操作快几个数量级。一旦Client获得用过访问某个Server的Ticket,该Server就能根据这个Ticket实现对Client的验证,而无须KDC的再次参与。

欢迎关注IT贫道,获取IT技术。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT贫道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值