Kerberos简介和工作原理

2020-05-04 16:20发布

 Kerberos简介

Kerberos 需要 The Key Distribution Centers(KDC)来进行认证。KDC 只有一个 Master,可以带多个 slaves 机器。slaves 机器仅进行普通验证。Mater 上做的修改需要自动同步到 slaves。另外,KDC 需要一个 admin用户,来进行日常的管理操作。

KDC提供两大主要功能:认证服务(Authentication Service,AS)和票据授权服务(Ticket Granting Service,TGS)。AS负责对用户和服务进行认证,TGS负责生成由有实效的密码消息组成的票据。票据用户客户端向服务器进行认证。

通信双方称为标识(Principal),每一方在KDC中都定义一个标识。每一方与KDC共享秘钥。

每一个KDC与一个领域(realm)关联,领域与Windows中术语域(domain)相当。在一个KDC中定义的标识属于同一个领域。在网络中可能存在多个KDC,也就存在多个领域。

Kerberos中的一些概念。

KDC:密钥分发中心,负责管理发放票据,记录授权。

KDC包含两个主要的守护进程。

· krb5kdc:Kerberos认证服务器,负责认证客户端和发放票据。

· kadmin:管理服务器守护进程,负责执行管理操作,比如添加新的标识,更改密码,以及KDC上的其他此类活动等。

Kerberos也提供了一些工具来协助使用KDC。

· kadmin和kadmin.local:管理客户端,连接kadmind守护进程来执行管理操作。kadmin.local可以直接连接本地服务器的KDC数据库,kadmin允许远程连接。

· kinit:实用工具,用于向KDC认证,并获取Kerberos的票据给用户。

· klist:使用工具,可以列出客户端本地凭据缓存中的Kerberos票据。

· ktutil:密钥标签文件使用工具,用户更新和查询密钥的标签文件。

· kdb5_util:KDC数据库工具,创建KDC数据库并维护。

域:kerberos管理领域的标识。                       

principal:当每添加一个用户或服务的时候都需要向kdc添加一条principal,principl的形式为 主名称/实例名@领域名。

主名称:主名称可以是用户名或服务名,还可以是单词host,表示是用于提供各种网络服务(如ftp,rcp,rlogin)的主体。

实例名:实例名简单理解为主机名。

领域:Kerberos的域。

 Kerberos工作原理

1) 客户端发送认证请求给KDC,请求票据授权票据(Ticket Granting Ticket,TGT)。

2) KDC提供TGT和session key给客户端。TGT是KDC提供给被认证用户的一个特殊票据,可以用于获取任何服务器的服务票据。TGT生命周期为8~10小时,在这个时间段内,用户可以请求想要通信的任何服务器的票据。Session Key是通信双方的一个公共密码,用于加密双方的通信数据。

3) 使用TGT,客户端请求服务票据。

4) KDC提供服务票据(TGS)和可用于加密数据的session key给客户端请求的服务器。Session Key采用服务器的密钥加密,所以只有指定服务器可以使用其密钥解密session key,然后与用户通信。Session Key也会在8~10小时后失效。

5) 客户端可以联系目标服务器,并提供TGS,服务器基于私有密钥解密TGS,并认证客户端。

6) 服务器将给加密的授权者提供session key。现在客户端和服务器共享该会话密钥,它可以用户双方任何数据加密需求。

【注】:Kerberos是时间敏感的,所以需要所有机器进行时间同步,最多允许5分钟的延迟。如果有的服务器延迟超过5分钟,它将无法通过认证。