kerberos认证原理

什么是kerberos

kerberos就是一种计算机网络的授权协议,可以用在非安全的网络环境中,对个人通信以安全的手段进行身份认证。同时,客户端与服务器端均可向对方进行身份认证,因此可用于防止窃听,保护资料完整性的应用中。基本上, kerberos是通过对称秘钥的方式来进行资料加密的。

server如何确认client的来源也是正确的?此外,如果第一次连线的时候,那部server本身就有问题,那你怎么确认该server是真的你要去的那一部?

因此,在kerberos 的运作中,首先整个kerberos 系统就需要一部『可信赖的第三方』,这部大家都公认的第三方server 定义上被称为秘钥钥分发中心(Key Distribution Center, KDC)

那么在整个架构里面,到底是如何达成资料加密的呢?首先有个大前提,就是所有的主机(不论是server 端还是client 端) 都需要加入kerberos 服务内, 所有的主机都必须要向kerberos KDC 请求一个票据(ticket),且KDC 必须要针对这个要求的来源设定好相对应的规则设定(principal), 因此所有的主机就能够根据这个对应的票据来跟KDC 验证后,并要求给予加密的金钥资料了。

用途

  • hadoop集群认证
  • 服务器资源申请

术语了解

  • Principal

一个用户会以一个独一无二的身份来被KDC认证,该身份被称为principal。一个Principal由三个部分组     成:pri mary, instance以及realm,其组成形式为primary/instance@realm。

  • primary : 可以是OS中的username,也可以是service name;
  • instance : 用于区分属于同一个user或者service的多个principals,该项为optional;
  • realm : 类似于DNS中的domain,定义了一组principals
  • Principal:安全个体,具有唯一命名的客户端或服务器。命名规则:主名称+实例+领域,如本文开头中的sherlocky/admin@EXAMPLE.COM
  • Ticket:票据,一条包含客户端标识信息、会话密钥和时间戳的记录,客户端用它来向目标服务器认证自己
  • Session key:会话密钥,指两个安全个体之间使用的临时加密秘钥,其时效性取决于单点登录的会话时间长短
  • AS:认证服务器(Authentication Server),KDC的一部分。通常会维护一个包含安全个体及其秘钥的数据库,用于身份认证
  • SS:特定服务的提供端(Service Server)
  • TGS:许可证服务器(Ticket Granting Server),KDC的一部分,根据客户端传来的TGT发放访问对应服务的票据
  • TGT:票据授予票据(Ticket Granting Ticket),包含客户端ID、客户端网络地址、票据有效期以及client/TGS会话密钥
  • KDC:Key分发中心(key distribution center),是一个提供票据(tickets)和临时会话密钥(session keys)的网络服务。KDC服务作为客户端和服务器端信赖的第三方,为其提供初始票据(initial ticket)服务和票据授予票据(ticket-granting ticket)服务,前半部分有时被称为AS,后半部分有时则被称为TGS。

具体流程

1、用户登录

  • 用户在客户端输入用户名和密码
  • 客户端将密码转换为对称密钥

2、客户端认证

  • 客户端向认证服务器发送 1 条包含用户 ID 的明文消息,申请基于该用户所应享有的服务。
  • 认证服务器检查数据库是否存在此用户。如果存在,认证服务器会使用数据库中保存的此用户的密钥,来返回如下信息

        Message A:通过用户密钥加密的 Client/TGS Session key

        Message B:使用 TGS 本身的密钥加密的 Ticket-Granting-Ticket(TGT,包含用户 ID,客户端网络地            址,ticket 有效期,和 Client/TGS Session Key)

  • 客户端收到 Message A 和 B,尝试使用用户提供的密钥解密 Message A。如果用户提供的密钥和认证服务器保存的密钥不匹配将会导致解密失败。如果密钥正确,客户端将会得到一个 Client/TGS Session Key。客户端会缓存这个 Session key 用于接下来的通讯。(需要注意的是客户端无法解密 Message B,因为这个消息使用认证服务器的私钥加密的)。现在客户端有足够的信息来和票据授权服务器通信了。

3、服务授权

  • 当要请求服务时,客户端需要向票据授权服务器发送以下信息:

Message C:由 Message B 的 TGT 和要请求的服务的 ID 组成

Message D:通过 Client/TGS Session Key 加密的 Authenticator(由用户 ID 和时间戳组成)

  • 当收到 Message C 和 D 后,票据授权服务器将 Message B 从 Message C 里面提取出来,然后使用票据授权服务器的私钥解密 Message B。 从解密后的 Messsage B 中能够得到 Client/TGS session key。然后使用这个密钥解密 Message D(Authenticator) 然后对比 Message C 和 Message D 的用户 ID 是否一致(Message C 的用户 ID 通过解密 TGT 得到), 若一致票据授权服务器将发送以下消息给客户端:

Message E:使用请求的服务的私钥加密的 Client-to-server ticket(由用户 ID,客户端网络地址,有效期 和 Client/Server Session Key 组成)

Message F:使用 Client/TGS Session Key 加密的 Client/Server Session Key。

4、请求服务

当从票据授权服务器收到 Message E 和 F 后,客户端就有足够的信息来向特定服务提供端(Service Server SS,下面简称为服务器)验证自己的身份了。 客户端连到服务器然后发送以下消息:

Message E:就是上一步的 Message E,里面的内容使用服务器的私钥加密的。

Message G:使用 Client/Session Key 加密的新的 Authenticator(包含 用户 ID,时间戳)

当服务器收到 Message E 和 G 后,它首先使用自己的私钥解压 Message E 得到 Client/Server Session Key。 然后服务器使用 Client/Server Session Key 解压 Authenticator(即 Message G)然后对比 Message E 和 G 的用户 ID 是否一致。 如果一致服务器将发送以下消息到客户端确认验证通过:

Message H:使用 Client/Server Session Key 加密的时间戳(在 Authenticator 中得到)

客户端解密确认消息,然后检查时间戳是否正确,如果正确客户端将认为服务器是可信的。

服务器为客户端提供服务。

局限性

  • 单点风险:过度依赖于KDC服务,Kerberos协议运转时需要KDC的持续响应,一旦KDC服务挂了,或者KDC数据库被攻破,那么Kerberos协议将无法运转
  • 安全个体自身的安全:Kerberos协议之所以能运行在非安全网络之上,关键假设就是主机自身是安全的,一旦主机上的私钥泄露,攻击者将能轻易的伪装该个体实施攻击
  • Kerberos要求参与通信的主机的时钟同步。票据具有一定有效期,因此,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。默认设置要求时钟的时间相差不超过10分钟。在实践中,通常用网络时间协议后台程序来保持主机时钟同步。
  • 管理协议并没有标准化,在服务器实现工具中有一些差别.
  • 因为所有用户使用的密钥都存储于中心服务器中,危及服务器的安全的行为将危及所有用户的密钥。

其他安全机制

1.OAuth认证

OAuth(Open Authorization,开放授权)用于第三方授权服务,现常用的第三方账号登陆都是采用该机制。比如我用github账号登陆LeetCode官网,LeetCode并不需要知道我的github账号、密码,它只需要将登陆请求转给授权方(github),由它进行认证授权,然后把授权信息传回LeetCode实现登陆。

2.LDAP

LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一种用于访问目录服务的业界标准方法,LDAP目录以树状结构来存储数据,针对读取操作做了特定优化,比从专门为OLTP优化的关系数据库中读取数据快一个量级。LDAP中的安全模型主要通过身份认证、安全通道和访问控制来实现,它可以把整个目录、目录的子树、特定条目、条目属性集火符合某过滤条件的条目作为控制对象进行授权,也可以把特定用户、特定组或所有目录用户作为授权主体进行授权,也可以对特定位置(如IP或DNS名称)进行授权(这个也挺重要的,可以去了解一下)

参考:

http://www.nosqlnotes.com/technotes/kerberos-protocol/

https://www.jianshu.com/p/2039fe8c62a1

http://linux.vbird.org/linux_enterprise/kerberos.phps

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

real向往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值