Kerberos单点登录实现过程

最近公司在做单点登录的选型,看了看Kerberos的技术实现。感觉网上Kerberos的相关资料不多,自己做了总结和大家分享,因为是在选型阶段,没做太深入的学习,学习了Kerberos的单点登录过程。

Kerberos基本原理

先转几个链接

1.关于理解Kerberos原理的经典对话,MIT的人为了帮助人们理解Kerberos的原理而写的一篇对话集,google Kerberos的原理”,满篇都是。

2.谈谈基于KerberosWindows Network Authentication - Part IIIIII,挺好挺详细的文章,一共三篇,值得一看。

http://www.cnblogs.com/artech/archive/2007/07/05/807492.html

3. 单点登录(SSO)的核心--kerberos身份认证协议技术参考(一),也是一系列三篇文章

http://chnking.cnblogs.com/archive/2006/03/07/344506.html

 

下面是自己的原创整理

Kerberos登录过程

名字解释

KDSKerberos Distribution Center 认证中心

TGTTicket Granting Ticket 身份凭证

Master Key真正的密钥的HashClientKDCServer均有自己的Master Key

Session Key这种Key只在一段时间有效,用于加密双方传输的部分数据包

SKDC-ServerServerKDC间的Session Key

SKDC-ClientClientKDC间的Session Key

1.      Authentication Service Exchange

这一步骤KDC实现了对Client的认证,同时KDCClient颁发了一个身份凭证TGTClient可凭此TGTKDC申请用于访问某个ServerTicket

1.1.     ClientKDCAuthentication Service服务发送KRB_AS_REQ,目的是申请获取一个用以访问所有Server的凭证(TGT);

KRB_AS_REQ包含:

l         Pre-authentication data:一个被Client Master Key加密的Timestamp,用于KDC验证客户端身份;

l         Client InfoClient标识,KDC以此查找ClientMaster Key

l         Server Info:此处并不是Client要访问ServerServer Name,实际上是KDCTicket Granting Service

1.2.     ASAuthentication Service服务)根据Client InfoKDC中提取Client Master Key,解密Pre-authentication data,如果Timestamp合法,则客户端通过验证,因为这个Master KeyClientKDC知道;

1.3.     ASKRB_AS_REP发送给客户端

KRB_AS_REP包含:

l         Client Master Key加密过的SKDC-Client

l         KDC Key加密过的TGTTGTSKDC-Client + Client Info + End Time),此TGT记做ClientTGT

2.      KRB_TGT

这一步骤Client获得了ServerTGT,此TGT封装了SKDC-Server,该Session Key会用于加密后续步骤中的Ticket

2.1.     Client接收到KRB_AS_REP后,使用Client Master Key对第一部分进行解密,可获得SKDC-Client,之后向Server申请获取ServerTGT,此TGT中封装了SKDC-Server

2.2.     ServerKRB_AP_REP返回给Client

KRB_AP_REP包括:

l         KDC Key加密过的TGTTGTSKDC-Server + Server Info + End Time),此TGT记做ServerTGT

注:ServerTGT可如同步骤1ServerKDC申请,并将申请到的TGT缓存到Server中。ClientServer获取时可直接将其返回,否则需通过AS ExchangeServerKDC获取。

3.      TGSTicket Granting ServiceExchange

这一步骤ClientKDC提供TGTKDC验证TGT通过后向Client颁发访问ServerTicket

3.1.     Client获得Server TGT后,向KDC中的TGSTicket Granting Service)发送KRB_TGS_REQ,申请用于访问Server Ticket

KRB_TGS_REQ包含:

l         ClientTGT:在步骤1处生成,由KDC Master Key加密

l         ServerTGT:在步骤2处生成,由KDC Master Key加密

l         AuthenticatorClient Info +Timestamp):用来证明Client TGT是自己所拥有的,所以需要用SKDCClient加密

l         Client InfoClient标识

l         Server Info: Client试图访问的那个Server

3.2.     KDC先用KDC Master Key解密ClientTGT,获得SKDC-Client

3.3.     使用SKDCClient解密Authenticator,通过比对3.23.3步骤中分别获得的Client Info可验证发送者是否是Client TGT的真正拥有者;

3.4.     KDC再用KDC Master Key解密ServerTGT获得SKDC-Server

3.5.     验证通过后,向Client发送KRB_TGS_REP

KRB_TGS_REP 包含:

l         使用SKDC-Client加密的SServer-Client

l         使用SKDC-Server加密的Session Ticket,该Ticket中包括SServer-ClientClient nameEnd TimeTicket到期时间)

4.      CSClient/Server Exchange

Client接收到KRB_TGS_REP 后,使用SKDC-Client解密可获得SServer-Client,有了SServer-ClientTicketClient就可以与Server进行交互而无需通过KDC

这一步骤完成了ServerClient的认证。

4.1.     Client接收到KRB_TGS_REP后,使用SKDC-Client对第一部分解密可获得SServer-Client,随后创建Authenticator并使用SServer-Client加密

4.2.     ClientServer发送KRB_AP_REQ

KRB_AP_REQ包含内容:

l         Session TicketClient Info + SServer-Client+ End Time

l         Authenticator Client Info + Timestamp

l         是否需要进行双向验证的Flag

4.3.     Server使用SKDC-Server解密Ticket获得 SServer-Client

4.4.     使用SServer-Client解密Authenticator,通过比较Authenticator中的Client InfoTicket中的Client Info实现对Client的验证。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值