Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1859330
  • 博文数量: 38
  • 博客积分: 690
  • 博客等级: 中士
  • 技术积分: 3715
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-27 14:06
文章分类

全部博文(38)

文章存档

2018年(8)

2016年(4)

2015年(2)

2014年(1)

2013年(3)

2012年(20)

分类: 网络与安全

2012-07-12 23:27:31

                                     Kerberos认证

    什么是kerberos协议,估计很多人都没有通过,实际上它应用非常广泛,在windows域和许多开发平台上应用很广。它应用最多的是统一登录SSO(Single Sign On)框架上应用。 

    什么是SSO,举个例子来说,一个公司开始有个系统A,用户每次登陆都要输入用户名密码鉴权。用来确认用户是合法用户,同时也要确定服务是合法服务,如何确定服务是合法服务呢,通常方法是验证过程不要使用明文密码。用密码(或含有密码的信息和过期时间)做密钥加密得到一串信息,作为验证凭证。这样,如果是非法服务器,没有用户密码信息,当然就解不开。这样就达到双方互相认证的目的。 

    当有一天公司扩张了,又建立了一个系统B,是不是B又搞一套认证系统呢。那B是又搞一套用户名密码,还是把A的用户名密码库copy过来,一般情况下,A是不同意copy的,一是这份数据不能太多分支在其他地方,安全性非常不好。而是还要保持更新。   

    再搞一套用户名密码系统,太挫了。是不倒是后出了系统CDEF…;都要搞个新密码。用户记住密码烦都烦死了。再说这样的设计,拿的出手吗。 

    于是乎就有SSO系统的诞生,就是“一次登录,到处通行”。在B系统登录,通行ABCD…; 或者在C系统登录,通行ABCD… 

    有人说,那还不简单。建一个session服务器,所有系统到这台机器上认证session。不久解决了。貌似解决方法很简单。但是这里有点问题是:每个系统处理每个请求都要先到session服务器去验证一下,查一下用户是否是合法用户。这样用户量大的话,性能是个问题。性能问题还好解决。严重的是安全问题。假如用户在A系统认证过,分配一个session,然后访问B系统,携带上sessionB拿着session去认证系统校验。这样可以确认A是合法用户,但是用户又如何确认B是合法服务,而不是钓鱼服务呢。 

    Kerberos就是解决这样问题,提供统一登录服务。即保证了性能(每个系统自己校验和分配session),有保证安全性(防止用户和服务之间互相欺骗)。关于kerberos个人看个不少资料,觉得最经典的就是那个kerberos对话。有兴趣的网上搜一下。我这里整理了4PPT,代表认证的4个步骤。比资料容易懂。

   

 

 

 

clip_image004clip_image002

 

clip_image006

 

clip_image008

 

clip_image010

 

阅读(11132) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

wojiushiwo9872013-11-03 18:50:21

分析的很好!
Kerberos认证相关问题思路请教:
    在Windows客户端与Windows服务器的kerberos认证过程中,通过第二阶段客户端向KDC(密钥分配中心)的TGS数据交互,客户端获取到了可以与服务端会话的Service_key和Ticket。  

    如果服务器端KDC用开源的Samba实现(前提Samba内实现了MIT的kerberos协议),是不是我们就能读取到Service_key了呢?
    或者您有获取Service_key的其他思路?期待您的回复!