转自:
http://dsw.iteye.com/blog/333351
最近公司在做单点登录的选型,看了看Kerberos的技术实现。感觉网上Kerberos的相关资料不多,自己做了总结和大家分享,因为是在选型阶段,没做太深入的学习,学习了Kerberos的单点登录过程。
Kerberos基本原理
先转几个链接
1.关于理解Kerberos原理的经典对话,MIT的人为了帮助人们理解Kerberos的原理而写的一篇对话集,google “Kerberos的原理”,满篇都是。
2.谈谈基于Kerberos的Windows Network Authentication - Part I、II、III,挺好挺详细的文章,一共三篇,值得一看。
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登录过程
名字解释
KDC:Kerberos Distribution Center 认证中心
TGT:Ticket Granting Ticket 身份凭证
Master Key:真正的密钥的Hash,Client、KDC、Server均有自己的Master Key
Session Key:这种Key只在一段时间有效,用于加密双方传输的部分数据包
SKDC-Server:Server和KDC间的Session Key
SKDC-Client:Client和KDC间的Session Key
1. Authentication Service Exchange
这一步骤KDC实现了对Client的认证,同时KDC向Client颁发了一个身份凭证TGT,Client可凭此TGT向KDC申请用于访问某个Server的Ticket。
1.1. Client向KDC的Authentication Service服务发送KRB_AS_REQ,目的是申请获取一个用以访问所有Server的凭证(TGT);
KRB_AS_REQ包含:
- Pre-authentication data:一个被Client Master Key加密的Timestamp,用于KDC验证客户端身份;
- Client Info:Client标识,KDC以此查找Client的Master Key;
- Server Info:此处并不是Client要访问Server的Server Name,实际上是KDC的Ticket Granting Service
1.2. AS(Authentication Service服务)根据Client Info从KDC中提取Client Master Key,解密Pre-authentication data,如果Timestamp合法,则客户端通过验证,因为这个Master Key仅Client和KDC知道;
1.3. AS将KRB_AS_REP发送给客户端
KRB_AS_REP包含:
- 被Client Master Key加密过的SKDC-Client
- 被KDC Key加密过的TGT,TGT(SKDC-Client + Client Info + End Time),此TGT记做Client的TGT
2. KRB_TGT
这一步骤Client获得了Server的TGT,此TGT封装了SKDC-Server,该Session Key会用于加密后续步骤中的Ticket
2.1. Client接收到KRB_AS_REP后,使用Client Master Key对第一部分进行解密,可获得SKDC-Client,之后向Server申请获取Server的TGT,此TGT中封装了SKDC-Server;
2.2. Server将KRB_AP_REP返回给Client;
KRB_AP_REP包括:
- 被KDC Key加密过的TGT,TGT(SKDC-Server + Server Info + End Time),此TGT记做Server的TGT
注:Server的TGT可如同步骤1由Server向KDC申请,并将申请到的TGT缓存到Server中。Client向Server获取时可直接将其返回,否则需通过AS Exchange由Server向KDC获取。
3. TGS(Ticket Granting Service)Exchange
这一步骤Client向KDC提供TGT,KDC验证TGT通过后向Client颁发访问Server的Ticket
3.1. Client获得Server TGT后,向KDC中的TGS(Ticket Granting Service)发送KRB_TGS_REQ,申请用于访问Server 的Ticket;
KRB_TGS_REQ包含:
- Client的TGT:在步骤1处生成,由KDC Master Key加密
- Server的TGT:在步骤2处生成,由KDC Master Key加密
- Authenticator(Client Info +Timestamp):用来证明Client TGT是自己所拥有的,所以需要用SKDC—Client加密
- Client Info:Client标识
- Server Info: Client试图访问的那个Server
3.2. KDC先用KDC Master Key解密Client的TGT,获得SKDC-Client;
3.3. 使用SKDC—Client解密Authenticator,通过比对3.2和3.3步骤中分别获得的Client Info可验证发送者是否是Client TGT的真正拥有者;
3.4. KDC再用KDC Master Key解密Server的TGT获得SKDC-Server;
3.5. 验证通过后,向Client发送KRB_TGS_REP
KRB_TGS_REP 包含:
- 使用SKDC-Client加密的SServer-Client
- 使用SKDC-Server加密的Session Ticket,该Ticket中包括SServer-Client、Client name、End Time(Ticket到期时间)
4. CS(Client/Server )Exchange
Client接收到KRB_TGS_REP 后,使用SKDC-Client解密可获得SServer-Client,有了SServer-Client和Ticket,Client就可以与Server进行交互而无需通过KDC。
这一步骤完成了Server对Client的认证。
4.1. Client接收到KRB_TGS_REP后,使用SKDC-Client对第一部分解密可获得SServer-Client,随后创建Authenticator并使用SServer-Client加密
4.2. Client向Server发送KRB_AP_REQ
KRB_AP_REQ包含内容:
- Session Ticket(Client Info + SServer-Client+ End Time)
- Authenticator (Client Info + Timestamp)
- 是否需要进行双向验证的Flag
4.3. Server使用SKDC-Server解密Ticket获得 SServer-Client;
4.4. 使用SServer-Client解密Authenticator,通过比较Authenticator中的Client Info和Ticket中的Client Info实现对Client的验证。
-@end----------------------------------------------------------------------------
Kerberos认证问题的调试试验
http://blog.csdn.net/directionofear/article/details/8054313
Windows Authentication in ASP.NET 2.0
http://msdn.microsoft.com/en-us/library/ff647076.aspx
- 大小: 45.4 KB
分享到:
相关推荐
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
基于java的网吧管理系统答辩PPT.pptx
基于java的基于SSM架构的网上书城系统答辩PPT.pptx
tornado-6.1-cp37-cp37m-win32.whl
c语言气泡排序、插入排序、选择排序、快速排序、希尔排序、堆排序、合并排序_SortAlgorithm.zip
Keyboard Maestro 11.0.3_macwk.dmg
基于微信小程序的鲜花销售微信小程序答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
tornado-6.2b1-cp39-cp39-musllinux_1_1_x86_64.whl
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
tornado-6.1b2-cp38-cp38-manylinux2014_aarch64.whl
基于java的土家风景文化管理平台答辩PPT.pptx
jira安装包
基于java的机场网上订票系统答辩PPT.pptx
小区物业管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
yolo算法-金属-纸张-硬纸板垃圾数据集-13409张图像带标签-金属-纸张-硬纸板-塑料-其他-烟蒂-食物-玻璃.zip;yolo算法-金属-纸张-硬纸板垃圾数据集-13409张图像带标签-金属-纸张-硬纸板-塑料-其他-烟蒂-食物-玻璃.zip;yolo算法-金属-纸张-硬纸板垃圾数据集-13409张图像带标签-金属-纸张-硬纸板-塑料-其他-烟蒂-食物-玻璃.zip
项目介绍: 系统模块主要包括;用户、考试信息、考场信息、试卷、试题、考试等管理功能 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
Python脚本运行环境搭建所需要的资源包