11.2.2 Kerberos介绍

Kerberos是一种网络认证协议,主要用于计算机网络的身份鉴别。其特点是用户只需输入一次身份验证信息就可以凭借此验证获得的票据访问多个服务。Kerberos认证过程的实现不依赖于主机操作系统的认证。它不基于主机地址的信任,也不要求网络上所有主机的物理安全。Kerberos作为一种可信任的第三方认证服务,是通过传统的密码技术(如共享密钥)执行认证服务的。

(1)Kerberos协议中的基本概念

❑客户端(Client):客户端就是用户,也就是请求服务的用户。

❑服务器(Server):向用户提供服务的一方。

❑密钥分发中心(Kerberos Key Distribution Center, KDC):KDC存储了所有客户端密码和其他账户信息,它接收来自客户端的票据请求,验证其身份并对其授予服务票据。KDC中包含认证服务和票据授权服务两个服务。

❑认证服务(Authentication Service, AS):负责检验用户的身份。如果通过了验证,则向用户提供访问票据准许服务器的服务许可票据。

❑票据授权服务(Ticket-Granting Service, TGS):负责验证用户的服务许可票据。如果通过验证,则为用户提供访问服务器的服务许可票据。

❑票据(Ticket):用于在认证服务器和用户请求的服务之间安全地传递用户的身份,同时也传递一些附加信息。

❑票据授权票据(Ticket-Granting Ticket, TGT):客户访问TGS服务器需要提供的票据,目的是为了申请某一个应用服务器的服务许可票据。

❑服务许可票据:客户请求服务时需要提供的票据。

(2)Kerberos认证过程介绍

Kerberos协议使用了对称加密机制,因此必然存在类似于口令的密钥。为了避免口令在网络中不必要的传递,Kerberos将服务认证功能交由认证服务和票据授权服务两个服务完成。为了阐述Kerberos中蕴含的设计思想,我们以多次出示信用卡消费密码购买电影票将提高泄露消费密码的几率为例进行类比。

用户Dong经常到电影院看电影。为了方便,他通常使用带有消费密码的信用卡购买电影票。为此,Dong需向电影院售票处出示自己的信用卡,并输入自己的信用卡密码才能购买所需的电影票,从而持票入场。检票员会验证Dong所持有的票的有效性,以决定是否允许Dong进电影院观看电影。如果Dong多次观看电影,则需多次出示自己的信用卡及密码购票。从概率学上讲,随着Dong观看电影次数的增多,其信用卡和密码被窃取的概率会增加。因此为了减少信用卡及密码被窃取的概率,Dong应该减少出示信用卡和密码的次数。

那么如何才能减少出示信用卡和密码的次数呢?解决方法之一就是在各个电影院之间引入专门销售“通用电影票”的售票机构。这样,Dong希望观看某场电影时,不再需要出示自己的信用卡和密码,而只需出示自己的通用景点票即可。比如“通用电影票”可能是Dong花费了500元购买的,可换取20场具体电影的一个凭证。因此,他的“通用电影票”并不是作为进入电影院的凭证,而是作为置换具体电影院对应电影票的凭证,即Dong只需向该电影院售票处出示该凭证,即可获取一张进入该电影院的电影票。使用“通用电影票”可避免多次出示信用卡及密码,从而减少了机密信息被窃取的可能性。在该解决方案中,存在两个核心机构:“通用电影票”售票机构和电影票售票处。

根据以上实例,我们可以引出Kerberos中的两个核心服务器:认证服务器和票据许可服务器,其中,认证服务器类似于“通用电影票”售票机构,而票据许可服务器类似于电影票售票处。如同“通用电影票”售票机构不直接销售电影票,认证服务器也不直接颁发认证标识,而是只颁发可以购买认证标识的“票据”(TGT)。如同电影票售票处真正售票,票据许可服务器才真正地颁发认证标识。

在Kerberos中,当客户端请求一个服务时,Kerberos协议认证过程如图11-1所示,具体如下:

步骤1 客户端向KDC中的认证系统发送服务许可票据请求。

步骤2 KDC中的认证服务器接收到来自客户端的票据请求后,查找对应的数据,如果该用户合法,则为其返回服务许可票据。

步骤3 客户端向KDC中的票据许可服务器发送服务票据请求。

步骤4 票据许可服务器检查客户端的服务许可票据是否合法,如果合法,则为之返回服务票据。

步骤5 客户端获取服务许可票据后,向对应的服务器请求服务。

步骤6 服务器检查客户端的服务票据是否合法,如果合法,则为之返回服务器认证,从而可以安全地访问服务器。

11.2.2 Kerberos介绍 - 图1

图 11-1 Kerberos认证过程

Hadoop选用了Kerberos作为安全认证机制。相比于另外一种常用机制SSL(Secure Sockets Layer),Kerberos具有以下两个优点。

❑性能高:Kerberos采用了对称密钥,相比于SSL中自带的基于公钥的算法要高效得多。

❑用户管理简单:Kerberos依赖于第三方的统一管理中心——KDC,管理员对用户的操作直接作用在KDC上,相比于SSL中基于广播的更新机制则简单得多。比如,撤销用户权限时只需将用户从KDC的数据库上删除即可,而在SSL中,需要重新生成一个证书撤销列表,并广播给各个服务器。