冰解的破-kerberos

冰解的破-kerberos_第1张图片
kerberos

Kerberos这一名词来源于希腊神话“三个头的狗——地狱之门守护者” 系统设计上采用客户端/服务器结构与 DES加密技术,并且能够进行相互认证,即客户端和服务器端均可对对方进行 身份认证。可以用于防止窃听、防止replay攻击、保护 数据完整性等场合,是一种应用对称 密钥体制进行 密钥管理的系统。支持SSO。

学习整理:

  • 理解kerberos在spark/hadoop体系下的应用:

说道安全,可能是整个大数据体系中最晦涩难懂的一部分了(确实看了很多也不能很快上手),会涉及到系统中组件的方方面面,这里将最基本最核心的kerberos稍微梳理一下。
一.基本概念:

kerberos:地狱三头犬,三头分别指代client、server和KDC。

Princal(安全个体):被认证的个体,有一个名字和口令。

KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥,并在本地数据库(Account Database)存有各通信节点的master key,KDC=AS+TSG。

AS (Authentication Server): 认证服务器。

TSG(Ticket Granting Server): 许可证服务器。

Long-term Key:用户长期内保持不变的密码,以及其派生key,不应该在传输中使用。

Master Key:用户原始密码进行Hash运算所得hash code,其目的是保护用户密码不被管理员所遇见,也属于Long-term Key。

Short-term Key/Session Key:kdc分发用于加密传输数据,避免网络间使用Long-term Key。

SKDC-Client:KDC与Client之间的session key,与TGT关联,Client Log off会导致SKDC-Client的失效,所以也称Logon Session Key。

SKDC-Server:KDC和Server之间通讯用的session key。

SServer-Client:Client和Server之间通讯用的session key。

Authenticator:client发送的证明自身的信息,包括客户标识(Client Info)和时间戳(Timestamp)。

Session Ticket:一个记录,客户用它来向服务器证明自己的身份,包括SServer-Client(session key)、Client name & realm(Domain name\Client)和End time(Ticket的到期时间),最终通过SKDC-Server加密。

TGT(Ticket Granting Ticket):Ticket的认购权证,包括Session Key(SKDC-Client:Logon Session Key)、Client name & realm(Domain name\Client)和End time(TGT到期的时间)

KRB_AS_REQ(Authentication Service Request):包括Pre-authentication data(client master key加密过的时间戳)、Client name & realm(Domain name\Client)和Server Name(Ticket Granting Service的Server Name)

KRB_AS_REP(Authentication Service Response):包括Client的Master Key加密过的Session Key(SKDC-Client:Logon Session Key)和被自己(KDC)加密的TGT

KRB_TGS_REQ(Ticket Granting Service Request):包括TGT(被KDC的master key 加密的kdc-client 和 kdc-server的TGT)、Authenticator(被Session Key(SKDC-Client:Logon Session Key)加密)、Client name & realm(Domain name\Client)和Server name & realm(Domain name\Server,Client试图访问的那个Server)

KRB_TGS_REP(Ticket Granting Service Response):包括SServer-Client session key(Logon Session Key(SKDC-Client)加密)和Ticket(Skdc-server加密)

KRB_TGT_REQ:client请求获取sever与kdc间TGT。

KRB_TGT_REP:server返回kdc和server间TGT,包含kdc-server的TGT。

KRB_AP_REQ(Application Service Request):包括Authenticator(SServer-Client加密)、Ticket(Skdc-server加密)和Flag(表示Client是否需要进行双向验证)

KRB_AP_REP(Application Service Response): 若需要双向验证则返回,包括Timestamp(Authenticator中提取,并由SServer-Client加密)

双向认证(Mutual Authentication): 不但server可以对client认证,client也可以对server认证。client向server发送SServer-Client加密的Authenticator和Session Ticket,成功认证之后,若Credential中设置有需要认证的Flag,server会SServer-Client解密Authenticator,把其中的Timestamp提取出来SServer-Client加密后返回给client,若发送和接受的Timestamp一致则认为对方是自己试图访问的server。

二.工作流程:


冰解的破-kerberos_第2张图片
kerberos工作流程

kerberos认证一共分为5阶段,对应4种Sub-protocol:

  1. ASExchage阶段(Sub-protocol:Authentication Service Exchange),client向AS发送KRB_AS_REQ,AS收到KRB_AS_REQ之后先从Account Database中取得client的master-key对KRB_AS_REQ中的Pre-authentication data解密,若得到一个合法的timestamp,则通过验证,返回KRB_AS_REP(SKDC-Client+ kdc-client-TGT)。
  2. Server-TGT获取阶段(Sub-protocol:User2User Sub-Protocol),client向server发送KRB_TGT_REQ以获取server-kdc的TGT。收到请求后server返回包含TGT的KRB_TGT_REP,若server本地没有TGT则会与KDC进行ASExchange,缓存获得的Skdc-server和用KDC的master key加密的server-kdc的TGT。
  3. TGSExchage阶段(Sub-protocal:Ticket Granting Service Exchange),client向TGS发送KRB_TGS_REQ,TGS收到后先用自己的master-key对其中kdc-client和kdc-server的TGT解密以获取Skdc-client和Skdc-server。用Skdc-client将KRB_TGS_REQ中的Authenticator解密获取其中Client-Info与时间戳,对比时间戳(晚于系统的维护的可用client认证表中可接受时间,一般为5min)和对比Client-Info通过后,将Sserver-client通过Skdc-server加密后放入KRB-TGS-REP,返回给client。
  4. CSExchange阶段(Sub-Protocal:Client/Server Exchange),client向server发送KRB_AP_REQ,server收到后先用从ASExchage获得的Skdc-server对KRB_AP_REQ中的Ticket解密获取Sserver-client和ClientInfo,再使用Sserver-client对KRB_AP_REQ中Authenticator解密获取其中的ClientInfo和timestamp,若比对ClientInfo和timestamp通过,则client得到验证,若flag为ture,则返回KRB_AP_REP。
  5. 双向验证阶段,client收到KRB_AP_REP,通过SServer-Client解密得到timestamp,比对是否是之前发送的KRB_AP_REQ 中Authenticator的timestamp,若是则server得到验证。

三. kerberos优点:

  1. 效率高,client得到ticket之后通信不再通过kdc。
  2. 实现了双向验证。
  3. 实现对delegation的支持。
  4. 互操作性,得到业界广泛接受的共同标准,不同平台可互相操作。

四. kerberos在yarn上应用:


冰解的破-kerberos_第3张图片
yarn任务提交过程

处于性能考虑,kerberos只在用户与服务之间通信起作用以及服务与服务之间通信起作用,当用户认证之后,任务执行、访问服务、数据读写均使用特定服务(如:NameNode、Resource Manager)的token传递实现。

参考:
kerberos详细介绍:https://blog.csdn.net/wulantian/article/details/42418231
kerberos和hadoop:http://xuexi.edu360.cn/460.html
hadoop安全认证案例:https://my.oschina.net/drl/blog/676084
yarn中安全机制概述:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-security/
kerberos入门到放弃:https://ieevee.com/tech/2016/06/07/kerberos-1.html
https://ieevee.com/tech/2016/06/11/kerberos-2.html
https://ieevee.com/tech/2016/06/21/kerberos-3.html

TO BE CONTINUED ......

你可能感兴趣的:(冰解的破-kerberos)