Kerberos协议认证过程
Kerberos概述
Kerberos协议 是一个专注于验证通信双方身份的网络协议,不同于其他网络安全协议的保证整个通信过程的传输安全,Kerberos侧重于通信前双方身份的认定工作,帮助客户端以及服务端验证是真正的自己并非他人,从而使得通信两端能够完全信任对方的身份,在一个不安全的网络中完成一次安全的身份认证继而进行安全的通信。
Kerberos协议角色组成:
Kerberos协议中存在三个角色,分别是:
客户端
(Client):发送请求的一方服务端
(Server):接收请求的一方密钥分发中心
(Key distribution KDC)
密钥分发中心又分为两个部分,分别是:
AS(Authentication Server)
:认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)TGS(Ticket Granting ticket)
:票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)
Kerberos认证过程简化描述
客户端在访问每个想要访问的网络服务时,他需要携带一个专门用于访问该服务并且能够证明自己身份的票据,当服务端收到了该票据他才能认定客户端身份正确,向客户端提供服务。所以整个流程可简化为三大步
:
- 进行一个身份认证,找AS服务获取一个身份票据。
- 拿着身份票据去找TGS获取服务票据
- 拿着服务票据去找具体的服务
Kerberos协议怎么保证通信过程安全
- 客户端发送自己的用户名给AS
- AS验证用户名是否在白名单列表,如果在的话随机生成会话密钥 (as) ,返回如下信息
TGT1(session key(as),TGS服务器信息等)–客户端NTLM哈希加密
TGT2(session key(as),客户端信息等)–KRBTGT NTLM哈希加密
- KRBTGT用户只会在域控电脑上、(这种有一个好处,这个用户只有域控才有,域内其他主机没办法解这个用户的HASH, 如果使用 jrbtgt 这个用户HASH值加密数据,只有我自己才可以解开) 这个票如果发出去了不是为了让别人解的,是为了让我确认一下,我解开这个票,我确认这个票里的信息跟向我认证的这个人是不是同一个
- 用自己的NTLM哈希解密TGT1,获得TGS服务器信息以及**session key(as)**,TGT2由于是别人的哈希,所以解不开
- 生成认证因子(客户端信息,当前时间)–session key(as) 加密
- 发送认证因子以及TGT2给TGS服务
- TGS服务失解密TGT2获得 session kev(as) 紧接着利用sessiorkev(as)解密认证因子,对比认证因子与TGT2的客户端信息是否如果一致生成**session key(TGS)**,返回如下信息给客户
- TGT3(session key(TGS),服务器信息,票据到期时间)–session key(as)加密
- TGT4(session key(TGS),客户端信息,票据到期时间)–客户端想要访问的服务器的哈希加密
- 客户端解密TGT3,得到**session key(TGS)**,服务器信息
生成认证因子2(服务器信息,票据到期时间)– session key(TGS) 加密
发送认证因子2以及TGT4给服务器 - 服务器先用自己的哈希解密TGT4得到 session key(TGS) ,客户端信息,票据有效期利用session key(TGS) 解密认证因子对比客户端信息决定是否提供服务
黄金票据 白银票据
这里正好引申出来这个概念
一句话解决: 这个 Kerberos
协议里有两种票据 (一个身份票据一个服务票据)
这里面肯定黄金票据更值钱一些 所以在 Kerberos协议中 身份票据就是黄金票据(因为身份票据可以去申请多种服务票据)
服务票据就是白银票据(打印机的服务票据只能用于打印机服务)作用比较有限
Kerberos协议认证过程
http://example.com/posts/129d271/