1.什么是Kerberos协议

Kerberos是一种计算机网络认证协议,又叫"地狱犬",它允许某实体在非安全网络环境下通信,向另一个实体以一种安全的方式证明自己的身份。它也指由麻省理工实现此协议,并发布的一套免费软件。它的设计主要针对客户-服务器模型,并提供了一系列交互认证——用户和服务器都能验证对方的身份。Kerberos协议可以保护网络实体免受窃听和重复攻击。

Kerberos协议基于对称密码学,并需要一个值得信赖的第三方。Kerberos协议的扩展可以为认证的某些阶段提供公钥密码学支持。

tips:

在域环境中,默认先试用Kerberos进行认证,当使用Kerberos认证出现错误的时候使用NTLM认证。

该协议环环相扣,十分精彩。

 

2.Kerberos协议的一些术语

协议的安全主要依赖于参加者对时间的松散同步和短周期的叫做Kerberos票据的认证声明。 下面是对这个协议的一个简化描述,将使用以下缩写:

  • AS(Authentication Server)= 认证服务器
  • KDC(Key Distribution Center)= 密钥分发中心
  • TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
  • TGS(Ticket Granting Server)= 票据授权服务器
  • SS(Service Server)= 特定服务提供端

 

3.Kerberos协议的整个流程

登录后整个流程大致可以分为3个阶段:

认证-->授权-->获取服务

Kerobers协议属于LDAP吗_服务器

 

 

 

认证阶段:

Kerobers协议属于LDAP吗_时间戳_02

 

 

 

a.Client向AS发送授权请求,请求中包括Client的UserName (注意只有用户名没有密码)

b.AS会查询数据库中该用户名是否存在,如果存在,则向Client发送两条消息。1.Client/TGS SessionKey,用于Client向TGS通信,该SessionKey是使用Client秘钥加密的,Client拿到后可以解开获得SessionKey才能和TGS通信。2.TGT,它是使用TGS秘钥加密的,Client解不开

 

授权阶段:

Kerobers协议属于LDAP吗_Server_03

 

 

 

 

a.Client在认证阶段拿到Client/TGS SessionKey之后,使用Client秘钥解密后可以和TGS通信。Client把TGT、Service ID以及Authenticator交给TGS,Authenticator1是使用Client/TGS SessionKey加密的。

b.TGS拿到TGT之后,使用TGS秘钥解密,获得Client/TGS SessionKey。再用Client/TGS SessionKey对Authenticator1解密,获得用户ID和时间戳,进行验证。

c.验证通过后,TGS向Client发送两条信息。1.Client-Server Ticket,该票据是使用SS秘钥加密的,Client解不开。2.Client/SS SessionKey,该Session Key是使用Client/TGS会话秘钥加密的,Client解开后才能和SS通信。

 

获取服务阶段:

Kerobers协议属于LDAP吗_Server_04

 

 

a.Client拿到Client/SS SessionKey之后,使用Client秘钥解开后,就可以和SS通信。它向SS发送两条消息。1.Client-SS Ticket,该票据是使用SS秘钥加密的,Client解不开。2.Authenticator2,该鉴权符中具有用户ID和时间戳,是使用Client/SS会话秘钥加密的。

b.SS拿到Client/SS Ticket后,使用SS秘钥解密,得到Client/SS SessionKey,这时SS可以和Client通信,再用Client/SS SessionKey解密Authenticator2。得到用户ID和时间戳,然后进行验证,验证通过后向Client发送新的时间戳,该时间戳是使用Client/SS会话秘钥加密的。

c.Client收到时间戳后使用秘钥解密,然后进行验证是否正确,验证通过后则Client可以信任SS,从而可以与SS通信。

 

4.Kerberos协议的不足

 

  • 失败于单点:它需要中心服务器的持续响应。当Kerberos服务宕机时,没有人可以连接到服务器。这个缺陷可以通过使用复合Kerberos服务器和缺陷认证机制弥补。
  • Kerberos要求参与通信的主机的时钟同步。票据具有一定有效期,因此,如果主机的时钟与Kerberos服务器的时钟不同步,认证会失败。默认设置要求时钟的时间相差不超过10分钟。在实践中,通常用网络时间协议后台程序来保持主机时钟同步。
  • 管理协议并没有标准化,在服务器实现工具中有一些差别。RFC 3244描述了密码更改。
  • 因为所有用户使用的密钥都存储于中心服务器中,危及服务器的安全的行为将危及所有用户的密钥。
  • 一个危险客户机将危及用户密码。

 

 

5.参考资料:

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

2.https://zh.wikipedia.org/wiki/Kerberos