Artech

Develop every application as an art using the most suitable technologies!

常用链接

统计

积分与排名

CnBlogs

专家的Blog|主页

最新评论

[原创]谈谈基于Kerberos的Windows Network Authentication - Part III

Content:

基本原理
引入Key Distribution: KServer-Client从何而来
引入Authenticator : 为有效的证明自己提供证据
引入Ticket Granting  Service:如何获得Ticket
Kerberos的3个Sub-protocol:整个Authentication的流程
User2User Protocol: 有效地保障Server的安全
Kerberos的优点的优点
 

[原创]谈谈基于Kerberos的Windows Network Authentication - Part I
[原创]谈谈基于Kerberos的Windows Network Authentication - Part II

六、User2User Sub-Protocol:有效地保障Server的安全

通过3个Sub-protocol的介绍,我们可以全面地掌握整个Kerberos的认证过程。实际上,在Windows 2000时代,基于Kerberos的Windows Authentication就是按照这样的工作流程来进行的。但是我在上面一节结束的时候也说了,基于3个Sub-protocol的Kerberos作为一种Network Authentication是具有它自己的局限和安全隐患的。我在整篇文章一直在强调这样的一个原则:以某个Entity的Long-term Key加密的数据不应该在网络中传递。原因很简单,所有的加密算法都不能保证100%的安全,对加密的数据进行解密只是一个时间的过程,最大限度地提供安全保障的做法就是:使用一个Short-term key(Session Key)代替Long-term Key对数据进行加密,使得恶意用户对其解密获得加密的Key时,该Key早已失效。但是对于3个Sub-Protocol的C/S Exchange,Client携带的Ticket却是被Server Master Key进行加密的,这显现不符合我们提出的原则,降低Server的安全系数。

所以我们必须寻求一种解决方案来解决上面的问题。这个解决方案很明显:就是采用一个Short-term的Session Key,而不是Server Master Key对Ticket进行加密。这就是我们今天要介绍的Kerberos的第4个Sub-protocol:User2User Protocol。我们知道,既然是Session Key,仅必然涉及到两方,而在Kerberos整个认证过程涉及到3方:Client、Server和KDC,所以用于加密Ticket的只可能是Server和KDC之间的Session Key(SKDC-Server)。

我们知道Client通过在AS Exchange阶段获得的TGT从KDC那么获得访问Server的Ticket。原来的Ticket是通过Server的Master Key进行加密的,而这个Master Key可以通过Account Database获得。但是现在KDC需要使用Server和KDC之间的SKDC-Server进行加密,而KDC是不会维护这个Session Key,所以这个Session Key只能靠申请Ticket的Client提供。所以在AS Exchange和TGS Exchange之间,Client还得对Server进行请求已获得Server和KDC之间的Session Key(SKDC-Server)。而对于Server来说,它可以像Client一样通过AS Exchange获得他和KDC之间的Session Key(SKDC-Server)和一个封装了这个Session Key并被KDC的Master Key进行加密的TGT,一旦获得这个TGT,Server会缓存它,以待Client对它的请求。我们现在来详细地讨论这一过程。


上图基本上翻译了基于User2User的认证过程,这个过程由4个步骤组成。我们发现较之我在上面一节介绍的基于传统3个Sub-protocol的认证过程,这次对了第2部。我们从头到尾简单地过一遍:

  1. AS Exchange:Client通过此过程获得了属于自己的TGT,有了此TGT,Client可凭此向KDC申请用于访问某个Server的Ticket。
  2. 这一步的主要任务是获得封装了Server和KDC的Session Key(SKDC-Server)的属于Server的TGT。如果该TGT存在于Server的缓存中,则Server会直接将其返回给Client。否则通过AS Exchange从KDC获取。
  3. TGS Exchange:Client通过向KDC提供自己的TGT,Server的TGT以及Authenticator向KDC申请用于访问Server的Ticket。KDC使用先用自己的Master Key解密Client的TGT获得SKDC-Client,通过SKDC-Client解密Authenticator验证发送者是否是TGT的真正拥有者,验证通过再用自己的Master Key解密Server的TGT获得KDC和Server 的Session Key(SKDC-Server),并用该Session Key加密Ticket返回给Client。
  4. C/S Exchange:Client携带者通过KDC和Server 的Session Key(SKDC-Server)进行加密的Ticket和通过Client和Server的Session Key(SServer-Client)的Authenticator访问Server,Server通过SKDC-Server解密Ticket获得SServer-Client,通过SServer-Client解密Authenticator实现对Client的验证。

这就是整个过程。

七、Kerberos的优点

分析整个Kerberos的认证过程之后,我们来总结一下Kerberos都有哪些优点:

1.较高的Performance

虽然我们一再地说Kerberos是一个涉及到3方的认证过程:Client、Server、KDC。但是一旦Client获得用过访问某个Server的Ticket,该Server就能根据这个Ticket实现对Client的验证,而无须KDC的再次参与。和传统的基于Windows NT 4.0的每个完全依赖Trusted Third Party的NTLM比较,具有较大的性能提升。

2.实现了双向验证(Mutual Authentication)

传统的NTLM认证基于这样一个前提:Client访问的远程的Service是可信的、无需对于进行验证,所以NTLM不曾提供双向验证的功能。这显然有点理想主义,为此Kerberos弥补了这个不足:Client在访问Server的资源之前,可以要求对Server的身份执行认证。

3.对Delegation的支持

Impersonation和Delegation是一个分布式环境中两个重要的功能。Impersonation允许Server在本地使用Logon 的Account执行某些操作,Delegation需用Server将logon的Account带入到另过一个Context执行相应的操作。NTLM仅对Impersonation提供支持,而Kerberos通过一种双向的、可传递的(Mutual 、Transitive)信任模式实现了对Delegation的支持。

4.互操作性(Interoperability)

Kerberos最初由MIT首创,现在已经成为一行被广泛接受的标准。所以对于不同的平台可以进行广泛的互操作。

相关内容:
[原创]谈谈基于Kerberos的Windows Network Authentication - Part I
[原创]谈谈基于Kerberos的Windows Network Authentication - Part II
[原创]谈谈基于Kerberos的Windows Network Authentication - Part III

posted on 2007-07-10 02:12 Artech 阅读(2619) 评论(32)  编辑 收藏

评论

#1楼 [楼主] 2007-07-10 02:32 Artech      

终于结束了这篇文章,在自己的沙发上躺躺。   回复  引用  查看    

#2楼  2007-07-10 02:34 不得不说 [未注册用户]

@Artech
好文章呀,觉得LZ很用心在写每一篇文章。首页现在已经很少出现这样高质量的文章了。   回复  引用    

#3楼  2007-07-10 02:39 熬夜的人 [未注册用户]

@不得不说
看了LZ的其它文章,确实如你所说,LZ的每篇文章都极具分量。LZ是个有心人。   回复  引用    

#4楼  2007-07-10 08:29 紫色阴影      

@Artech
我很佩服lz,技术强,文笔好,文章质量高 羡慕啊!!   回复  引用  查看    

#5楼  2007-07-10 09:02 Anytao      

专注成就专业, 是Dflying Chen给我赠言,这句同样适合你。每篇都很完美。   回复  引用  查看    

#6楼 [楼主] 2007-07-10 10:42 Artech      

@不得不说
谢谢你的“用心”二字,其实园子里还有很多人在用心地写文章。   回复  引用  查看    

#7楼 [楼主] 2007-07-10 10:46 Artech      

@熬夜的人
谢谢你这样和我一样熬夜的人。
写文章其实是一个双赢的事情,为了写好一片文章,对于自己来说是一个对已学知识进行归纳、梳理得过程。同时能同别人一起分享你的所得。   回复  引用  查看    

#8楼 [楼主] 2007-07-10 10:47 Artech      

@Anytao
“完美”愧不敢当,我会记住这句话“专注成就专业”。   回复  引用  查看    

#9楼  2007-07-10 10:58 stonezhu      

@Artech
由衷地赞美你一下,你的文章确实都质量很好!忙完看你的WCF系列。
希望LZ继续坚持。
谢谢   回复  引用  查看    

#10楼 [楼主] 2007-07-10 11:03 Artech      

@紫色阴影
谢谢,你的DLINQ系列也不错:)   回复  引用  查看    

#11楼 [楼主] 2007-07-10 11:04 Artech      

@stonezhu
谢谢,WCF希望一起交流、学习!   回复  引用  查看    

#12楼  2007-07-10 14:30 Laser.NET      

喜欢lz的文章,都很精华!牛:)   回复  引用  查看    

#13楼 [楼主] 2007-07-10 14:47 Artech      

@Laser.NET
欢迎常来光顾:)   回复  引用  查看    

#14楼  2007-07-10 14:48 Bird [未注册用户]

Artech兄你平时每天花多少时间专研技术啊,呵呵。   回复  引用    

#15楼 [楼主] 2007-07-10 14:53 Artech      

@Bird
这个不好说,有时候一段时间都不想看书,有时候整天看。状态好的时候看,不好的时候玩:)。
如果平均下来,每天应该有2到3个小时吧。   回复  引用  查看    

#16楼  2007-07-10 16:45 紫色阴影      

@Artech
Artech兄有没有什么好书推荐一下?   回复  引用  查看    

#17楼 [楼主] 2007-07-10 17:12 Artech      

@紫色阴影
哪方面?   回复  引用  查看    

#18楼  2007-07-11 00:17 紫色阴影      

@Artech
技术方面的都可以   回复  引用  查看    

#19楼  2007-07-11 00:17 紫色阴影      

@Artech
或者你认为经典,看了很有收获的 赫赫   回复  引用  查看    

#20楼 [楼主] 2007-07-11 12:49 Artech      

@紫色阴影
我介绍几本对我比较有帮助的书吧:
在CLR和.NET Framework方面,Jeffery Richter的《Applied .NET Framework Programing》和该书的第二版《CLR via C#》,Don Box的《.NET Essential》(这本书也是一位cnBlogs的朋友推荐的)。
ASP.NET方面,Dino Esposito的《Programming Microsoft ASP.NET 2.0 Core Reference》和姊妹篇《Programming Microsoft ASP.NET 2.0 Applications: Advanced Topics 》,最近又出了一本介绍ASP.NET AJAX的《Introducing Microsoft ASP.NET AJAX (Pro - Developer) 》。
Design Pattern方面,还是觉得开山之作,GoF的《Design Pattern:Elements of Reusable OO Software》最为经典。
分布式、SOA方面,几年前看的一本《Microsoft .NET Distributed Application: Integrating XML Web Service and .NET Remoting》对我帮助很大,不过从技术上看,这本书已经过时了。另一本有Tomas Erl的SOA入门级的书《SOA:Concept,Technology and Design》篇幅不长,主要介绍一些基础的概念和原理,感觉不错。
最近在看一个Professional SQL Server 2005系列的书:《Professional SQL Server 2005 Integration Service》,《Professional SQL Server 2005 Reporting Service》... ...写得也算中规中矩。
我的床头一直放的一本书是一本老书《TCP/IP Illustrated》,很多大学都把这本书作为讲授网络的教科书,这么多年,依然值得一读,毕竟TCP/IP体系变化不大。   回复  引用  查看    

#21楼  2007-07-11 16:43 紫色阴影      

@Artech
很不错,有时间一定看看

BTW 你看电子书还是纸张书?   回复  引用  查看    

#22楼 [楼主] 2007-07-11 17:00 Artech      

@紫色阴影
基本上是纸张书,电子书看着累。   回复  引用  查看    

#23楼  2007-07-11 19:45 紫色阴影      

@Artech
我也是,想请教你怎么把问题钻研到这么底层的 :)   回复  引用  查看    

#24楼 [楼主] 2007-07-11 21:28 Artech      

@紫色阴影
有一次,我参加一个面试,对方问我,为什么喜欢钻研CLR和.NET Framework。 我回答说:
1. CLR和.NET Framework是整个.NET的基石,要想走得更远,必须对基础有一个很正确的认识。
2. 我的好奇心促使我把一件事情的整个来龙去脉了解清楚,如果不能就会很郁闷。呵呵,这可能个人性格有关吧。

我觉得对事物的认知应该是立体的,既要从宏观上对整个系统的构架有一个整体的认知,也需要在微观上对程序的执行有一个正确的了解。所以我喜欢研究SOA,也喜欢研究CLR。   回复  引用  查看    

#25楼  2007-07-11 22:03 紫色阴影      

@Artech
说得很对,不管从哪个角度都要对它了如指掌
用C#以后就没有怎么钻研过底层机制,以前用STL时还能跟着书把源码看个遍
唉 以后得花点时间在.net底层上面
谢谢   回复  引用  查看    

#26楼  2007-07-11 22:04 紫色阴影      

@Artech
你很强,我以后多向你请教
最开始看你的博客都是潜水 呵呵   回复  引用  查看    

#27楼 [楼主] 2007-07-11 22:36 Artech      

@紫色阴影
你太抬举了,以后多多交流:)   回复  引用  查看    

#28楼  2007-08-06 13:07 魔王 [未注册用户]

请问版主,有没有一些关于Kerberos的程序实现的源代码呀,原理我懂,但是如何调用java中的库函数,建立起这套机制,我就不明白了。我的邮箱是angel_z_yu@163.com,谢谢!   回复  引用    

#29楼  2007-09-15 19:41 蛙蛙池塘      

专注成就专业,很不错,我太缺这种精神了,从来专不起来。   回复  引用  查看    

#30楼  2008-07-07 13:15 雪叶丹枫      

在谈到Kerberos的优点时提到:Delegation需用Server将logon的Account带入到另过一个Context执行相应的操作。

能否在此解释一下这句话的意思?   回复  引用  查看    

#31楼 [楼主] 2008-07-08 09:08 Artech      

@雪叶丹枫
说得直白一点,Client 通过Machine A 访问 Machine B。如果是Impersonation的方式,Client可以一Logon user的身份访问Machine A,但是不能以相同的身份访问Machine B。如果是Delegation则可以。   回复  引用  查看    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-07-10 02:29 编辑过


相关链接: