一、什么是kerberos
Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构,并且能够进行相互认证,即客户端和服务器端均可对对方进行身份认证。可以用于防止窃听、防止重放攻击、保护数据完整性等场合,是一种应用对称**体制进行**管理的系统。 Kerberos 的扩展产品也使用公开**加密方法进行认证 。
当有N个人使用该系统时,为确保在任意两个人之间进行秘密对话,系统至少保存有它与每个人的共享**,所需的最少会话**数为N个 。
Kerberos 网络认证协议允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。它也指由麻省理工实现此协议,并发布的一套免费软件。它的设计主要针对客户- - 服务器模型,并提供了一系列交互认证 —— 用户和 服务器( ( 或具体服务) ) 都 能验证对方的身份。 Kerberos 协议可以保护网络实体免受窃听和重复攻击。
Kerberos 协议基于对称密码学,并需要一个值得信赖的第三方。 Kerberos 协议的扩展可以为认证的某些阶段提供公钥密码学支持。
二、kerberos在hadoop中的位置
三、kerberos在hadoop中的概念
- kerberos principal
- 主体: 在Kerberos中用户或者服务被称为主体,一般由两部分或者三部分组成:primary主要标识、instance实例名称(可选)、realm领域。在Kerberos的认证系统中通过主体标识唯一身份,在CDH中主体一般是操作系统用户名或者服务名。
- Kerberos通过将票据Tickets分配给kerberos主体使其可以访问启用Kerberos集群的Hadoop服务。
- kerberos keytab
- Keytab文件包含了Kerberos主体和该主体秘钥的加密副本,对于Hadoop守护进程来说每个keytab文件是唯一的,因为实例包含了主机名,如hbase/[email protected],该文件用来认证kerberos主机上的主体,因此keytab一定要安全保存。
- delegation tokens
- 用户通过kerberos认证后,提交作业,如果用户此时登出系统,则后续的认证通过委托令牌的方式完成,委托令牌和Nn共享秘钥,用于模拟用户来获得执行任务,委托令牌有效期为一天,可以通过更新程序更新令牌不超过7天,任务完成以后委托令牌取消。
四、kerberos的工作机制
1、相关概念
kerberos依靠ticket的概念来工作,每个部分概念如下:
KDC(Key Distribution Center)= **分发中心
由AS和TGS组成,是所有通信的主要枢纽,保存有每个客户端或者服务的秘钥副本,辅助完成通信认证.
- AS(Authentication Server)= 认证服务器
- TGS(Ticket Granting Server)= 票据授权服务器
- TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
- SS(Service Server)= 特定服务提供端
kerberos设计的参与者:
- 请求访问某个资源的主体,可以是用户或者服务。
- 被请求的资源,一般是具体某个服务,比如hive等。
- KDC
2、功能描述
要开启一个认证会话,客户端首先将用户名发送到KDC的AS进行认证(一般是通过kinit命令完成),KDC服务器生成相应的票据授权票据(TGT)并打上时间戳,TGT是一个用于请求和其他服务通信的票据,并在数据库中查找该请求用户的密码,并用查找到的密码对TGT进行加密,将加密结果返回给请求用户。
客户端收到返回结果,使用自己的密码解密得到TGT票据授权票据,该TGT会在一段时间后自动失效,有些程序可以用户登录期间进行自动更新,比如hadoop的hdfs用户。当客户端需要请求服务时,客户端将该TGT发送到KDC的TGS服务,当用户的TGT通过验证并且有权限访问所申请的服务时,TGS生成一个被请求服务对应的Ticket和和Session Key,并发给请求客户端。
客户端将该Ticket和要请求的服务一同发送给目的服务端,完成验证并获得相应服务。简单地说,用户先用共享**从KDC的AS认证服务器得到一个身份证明。随后,用户使用这个身份证明与SS通信,而不使用共享**。
3、工作原理
3.1、客户端认证过程
客户端(Client)从认证服务器(AS)获取票据的票据(TGT)
1) 客户端向AS发送明文信息,申请基于该用户的请求服务,比如‘用户APP1想请求服务’。(注意:用户不向AS发送“用户**”(user's secret key),也不发送密码)该AS能够从本地数据库中查询到该申请用户的密码,并通过相同途径转换成相同的“用户**”(user's secret key)。
2) AS检查请求用户ID是否存在于Kerberos数据库中,如果存在则通过验证,返回如下信息。
- 消息A:会话秘钥,Client/TGS会话**(Client/TGS Session Key)(该Session Key用在将来Client与TGS的通信(会话)上),通过用户**(user‘s secret key)进行加密。
- 消息B:票据授权票据(TGT)(TGT包括: “Client/TGS会话**”(Client/TGS Session Key),KDC名字,用户ID,IP地址,TGT有效期),通过KDC中TGS**(TGS‘s secret key)进行加密。
- KDC将响应结果返回,包括加密后的新会话秘钥、TGT。
3) Client收到返回消息后,Client用自己的**解密返回的加密会话**,从而得到解密后的会话**Client/TGS会话**(Client/TGS Session Key), (注意:Client不能解密TGT,因为TGT是用TGS
**(TGS's secret key)加密的)。拥有了“Client/TGS会话**”(Client/TGS Session Key),Client就足以通过TGS进行认证了。
3.2、服务授权
client从TGS获取票据(client-to-server ticket)
1)当客户端需要请求某个服务时,发送如下信息到KDC。
- 消息C:1.获取的返回TGT,消息B,即通过TGS**(TGS‘s secret key)进行加密的TGT。2.想要获取服务的服务ID。
- 消息D:认证元组(用户ID、IP地址、时间戳),通过Client/TGS会话**(Client/TGS Session Key) 加密。
2) KDC收到请求后,TGS检查KDC数据库中是否存在该服务ID,如果存在,则TGS用自己的TGS**(TGS‘s secret key)解密请求消息获得TGT,得到之前生成的Client/TGS会话**(Client/TGS
Session Key) 。TGS在用该会话**Client/TGS Session Key解密认证元组,得到(用户ID、IP地
址、时间戳) ,并验证TGT和认证元组,如果验证通过返回如下:
- 消息E:Client-Server票据(Client-To-Server Ticket),(该Ticket包括:Client/SS会话**(Client/Server Session Key),用户ID,用户网址,有效期),通过提供该服务的服务**(service's secret key)进行加密。
- 消息F:Client/SS会话**( Client/Server Session Key),(该Session Key用在将来Client与Server Service的通信(会话)上),通过Client/TGS会话**(Client/TGS Session Key)进行加密。
3) 客户端收到响应后通过Client/TGS会话**”(Client/TGS Session Key)解密消息得到Client/SS会话**( Client/Server Session Key) 。 (注意:Client不能解密Client-Server票据(Client-To-
Server Ticket) ,因为是用“服务**”(service's secret key)加密的)。
3.3、服务请求
Client从SS获取服务
1) 通过获取的Client/SS会话**”(Client/Server Session Key)后,Client就可以使用服务器提供的服
务,Client向服务器发送如下信息。
- 消息E:Client-Server票据(Client-To-Server Ticket) ,(该Ticket包括:Client/SS会话密(Client/Server Session Key),用户ID,用户网址,有效期),通过提供该服务的服务**(service's secret key)进行加密。
- 消息G:新认证元组(用户ID、IP地址、时间戳),通过Client/SS会话**(Client/Server Session
Key) 进行加密。
2)SS用自己的**(service‘s secret key)解密消息Client-Server票据(Client-To-Server Ticket)从而得到TGS提供的Client/SS会话**(Client/Server Session Key)。再用这个会话**解密加密的新认证元组得到新认证元组。(同TGS一样)对Ticket和认证元组进行验证,验证通过则返回1条消息(确认函:确证身份真实,乐于提供服务):
- 消息H:新时间戳,(新时间戳是:Client发送的时间戳加1,v5已经取消这一做法),通过Client/SS会话**(Client/Server Session Key)进行加密。
3)Client通过Client/SS会话**(Client/Server Session Key)解密消息H,得到新时间戳并验证其是否正确。验证通过的话则客户端可以信赖服务器,并向服务器(SS)发送服务请求。
4)服务器(SS)向客户端提供相应的服务。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
用人品去感动别人,用改变去影响别人,用状态去燃烧别人,用行动去带动别人,用阳光去照耀别人,用坚持去赢得别人,要求自己每天都去做与目标有关的事情,哪怕每天只进步一点点,坚持下来你就是最优秀卓越的!欢迎大家加入大数据交流群:725967421 一起交流,一起进步!!
---------------------------------------------------------------------------------------------------------------------------------------------------------------------