暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka安全认证(二)——Kerberos

新运维新数据 2022-05-28
3010

各位新朋友~记得先点蓝字关注我哦~


上一期我们讲了Kafka的SASL_PLAINTEXT安全认证,这一期我们讲一讲另一种安全认证GSSAPI(Kerberos)。


什么是kerberos

Kerberos一词来源于古希腊神话中的Cerberus——守护地狱之门的三头犬。下图是Kerberos的Logo。

简单来说,Kerberos可以归结为:

  • 身份验证协议。

  • 使用票证进行身份验证。

  • 避免在本地存储密码或通过互联网发送密码。

  • 包含受信任的第三方。

  • 建立在对称密钥密码学的基础上。


Kerberos组件简介

Kerberos主要由三个部分组成:Key Distribution Center(即KDC)、Client和Service。


KDC

Key Distribution Center(即KDC)是Kerberos的核心组件,主要由三个部分组成:

  • Kerberos Database:储存用户密码以及其他信息。

  • Authentication Service(AS):进行用户身份信息验证,为客户端提供Ticket Granting Tickets(TGT)。

  • Ticket Granting Service(TGS):验证TGT,为客户端提供Service Tickets。


关系图

大致关系图如下图所示:


客户端会先访问两次KDC(密钥分发中心),然后再访问服务器。


Kerberos认证过程

认证流程图

Kerberos的认证流程如下图所示,主要分为以下十个步骤:


Kerberos认证步骤


客户端通过kinit USERNAME或其他方式,将客户端ID,目标服务ID,网络地址以及TGT有效期的寿命等信息发送给Authentication Server(以下简称AS)。



AS检查客户端ID是否存在KDC数据库中。



如果AS检查确认客户端ID在KDC数据库中,那么KDC将生成两条信息TGS Session Key和TGT发送给客户端:

  • 随机生成一个用于客户端与Ticket Granting Server(以下简称TGS)通信的Key。这个Key一般被称为TGS Session Key。

  • 生成一条包含客户端ID,TGS Session Key等信息由TGS密钥加密的信息。这条信息客户端无法解密,被称为Ticket Granting Ticket(TGT)。



客户端利用本地密钥解密出TGS Session Key。成功解密出信息即认证成功,如果无法解密出信息,那么认证失败。



客户端"无脑"将AS发送过来的TGT转发给TGS。此外,客户端还将包含自身信息的Authenticator经过TGS Session Key加密之后发送给TGS。



TGS使用自身密钥从TGT中解密出TGS Session Key,然后利用TGS Session Key从Authenticator中解密出客户端信息。

TGS解密出所有信息后,将进行身份检查,进行认证:

  • 将客户端ID与TGT中的客户端ID进行比较。

  • 比较来自Authenticator的时间戳和TGT的时间戳(Kerberos的时间容忍度一般为2分钟,也可以另行配置)。

  • 检查TGT是否过期。

  • 检查Authenticator是否已经在TGS的缓存中(为了避免重放攻击)。



当所有检查通过后,TGS将生成两条信息Kafka Session Key和Kafka Ticket发给客户端:

  • 随机生成一个客户端与Kafka服务交互时使用的Key,即Kafka Session Key。这个信息由TGS Session Key加密。

  • 生成一条包含客户端ID,Kafka服务ID,TGS Session Key等信息由Kafka服务的密钥加密的信息。这条信息客户端无法解密,被称为Kafka Ticket。


客户端利用TGS Session Key解密出Kafka Session Key。成功解密出信息即认证成功,如果无法解密出信息,那么认证失败。



客户端"无脑"将TGS发送过来的Kafka Ticket转发给Kafka Server。此外,客户端还将包含自身信息的Authenticator经过Kafka Session Key加密之后发送给Kafka Server。


10 

Kafka服务利用自身密钥解密出Kafka Ticket的信息,从中得到Kafka Session Key,随后利用Kafka Session Key解密用户的Authenticator信息。信息解密完成之后,Kafka服务同样需要做一些信息检查:

  • 将Authenticator中的客户端信息与Kafka Ticket中的客户端ID进行比较。

  • 比较来自Authenticator的时间戳和Kafka Ticket中的时间戳Kerberos的时间容忍度一般为2分钟,也可以另行配置)。

  • 检查Ticket是否过期。

  • 检查Authenticator是否已经在Kafka服务的缓存中(为了避免重放攻击)。

 

至此,所有的认证通过,客户端与Kafka服务完成了身份认证,可以进行后续信息通信了。


Kerberos的优缺点

优点

  • 密码无需通过网络传输。基于Ticket实现身份认证,可以极大程度地保障密钥安全性。

  • 双向认证。整个认证过程中,不仅需要客户端进行认证,待访问的服务端也需要认证。

  • 高性能。一旦客户端获得过访问某个服务端的Ticket,该服务端就能根据这个Ticket实现对客户端的验证,无需KDC再次参与。

 

缺点

  • 需要部署独立验证服务




美创运维中心数据库服务团队拥有Oracle ACE 1人、OCM 10余人、数十名Oracle OCP、MySQL OCP、红帽RHCA、中间件weblogic、tuxedo认证、达梦工程师 ,著有《Oracle DBA实战攻略》,《Oracle数据库性能优化方法和最佳实践》,《Oracle内核技术揭秘》等多本数据运维优化书籍。目前运维各类数据库合计2000余套,精通Oracle、MySQL、SQLServer、DB2、PostgreSQL、达梦等主流商业和开源数据库。并成为首批国内达梦战略合作伙伴之一,拥有海量经验和完善的人员培养体系。并同时提供超融合,私有云整体解决方案。


文章转载自新运维新数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论