Kerberos认证步骤

Kerberos的特点

Kerberos是一个Authentication协议,也就是说它的目的是判断某个client/server是否就是它声称的client/server。

Kerberos协议避免了用户的密码以明文的形式被传输,避免了密码被截获的危险。而且使用的是一种短期的Key,由于这种Key只在一段时间内有效,即使加密的数据包被恶意的网络监听者截获,等他把Key计算出来的时候,这个Key早就已经过期了。

Kerberos中的角色除了client和server,还引入了一个第三方:KDC(Kerberos Distribution Center)。从逻辑上KDC分成三部分:数据库,认证服务器(Authentication Server)和票据分发服务器(Ticket Granting Server)。后面将会进行更详细的介绍。

一旦Client从KDC获得用于访问某个Server的Ticket,之后该Server就能根据这个Ticket实现对Client的验证,而无须KDC的再次参与。

Kerberos 认证步骤

Kerberos认证步骤

1. Authentication Service Exchange

步骤1.

Client向KDC的Authentication Service发送Authentication Service Request(KRB_AS_REQ)。内容包含:

  • Pre-authentication data:包含用以证明自己身份的信息。就是证明自己知道自己声称的那个account的Password。一般地,它的内容是一个被Client的Master key加密过的Timestamp。
  • Client name & realm
  • KDC的Ticket Granting Service的Server Name。

步骤2.

AS(Authentication Service)通过它接收到的KRB_AS_REQ验证发送方的是否是在Client name & realm中声称的那个人,也就是说要验证发送放是否知道Client的Password。所以AS只需从Account Database中提取Client对应的Master Key对Pre-authentication data进行解密,如果是一个合法的Timestamp,则可以证明发送方提供的是正确无误的密码。

验证通过之后,AS将一份Authentication Service Response(KRB_AS_REP)发送给Client。KRB_AS_REQ主要包含两个部分:

  • 被Client的Master Key加密过的Logon Session Key
  • 被自己(KDC)的Key加密过的TGT。TGT主要包含三部分内容:

(1)Logon Session Key(2)Client name & realm (3)End Time:TGT的到期时间

Client通过自己的Master Key对第一部分解密获得Logon Session Key之后,携带着TGT便可以进入下一步:TGS(Ticket Granting Service)Exchange。

2. TGS(Ticket Granting Service)Exchange

步骤3.

Client向KDC中的TGS(Ticket Granting Service)发送Ticket Granting Service Request(KRB_TGS_REQ),内容包括:

  • TGT:Client通过AS Exchange获得的被KDC Key加密的Ticket Granting Ticket。
  • Authenticator:用以证明当初TGT的拥有者是否就是自己,所以它用Logon Session Key来进行加密。内容包括:
    (1)Client Info (2)Timestamp
  • Client name & realm
  • Server name & realm:这是Client试图访问的那个Server

步骤4.

TGS先通过自己的Master Key对Client提供的TGT进行解密,从而获得这个Logon Session Key。再通过这个Logon Session Key解密Authenticator进行验证。

验证通过向对方发送Ticket Granting Service Response(KRB_TGS_REP)。内容包括:

  • 使用Logon Session Key加密过的Session Key。该Session Key 将被用于Client和Server的认证
  • 使用Server的Master Key进行加密的Ticket。该Ticket大体包含:

(1)Session Key (2)Client name & realm(3)End Time:Ticket的到期时间

Client收到KRB_TGS_REP,使用Logon Session Key解密第一部分后获得Session Key。有了Session Key和Ticket,Client就可以之间和Server进行交互,而无须在通过KDC作中间人了。所以我们说Kerberos是一种高效的认证方式,它可以直接通过Client和Server双方来完成。

3. CS(Client/Server )Exchange

步骤5.

Client向Server发送KRB_AP_REQ,内容包括:

  • Ticket:Client 通过TGS Exchange获得的被Server Key加密的Ticket
  • Authenticator:用以证明Ticket的拥有者是否就是自己,所以用Session Key进行加密。内容包括:(1)Client Info(2)Timestamp
  • Flag:用于表示Client是否需要进行双向验证

步骤6.

Server接收到KRB_AP_REQ之后,通过自己的Master Key解密Ticket,从而获得Session Key(SServer-Client)。通过Session Key(SServer-Client)解密Authenticator,进而验证对方的身份。验证成功,让Client访问需要访问的资源,否则直接拒绝对方的请求。

对于需要进行双向验证,Server从Authenticator提取Timestamp,使用Session Key(SServer-Client)进行加密,并将其发送给Client用于Client验证Server的身份。

Kerberos协议的一些术语

Principal:

Principal是用来表示参加认证实体,相当于用户名,用来来表示一个client或server唯一的身份。Principal是由三个部分组成:名字(name),实例(instance,这部分可选),REALM(域)。格式是:name/instance@REALM 。

  • name:

可以是任意的字符串,比如说可能是操作系统下的用户名等。

  • instance

定义了用户在不同的role下使用的priciple,或者是在host在不同的service上运行时使用的principle。

  • realm

realm从逻辑上定义了一组object。每个realm可以有私有的配置,包括KDC的地址和加密算法等。大型公司会给公司内不同的团队创建不同的realm。

KDC数据库

KDC数据库存储了它所有用户(包括client和server)的entry。我们用principal来引用一个entry,。每个entry包括以下的信息:

  1. 与entry相关联的principal
  2. principlal的master key
  3. 与这个principal相关联的ticket最长可用时间
  4. 与这个principal相关联的ticket的最长的renew时间(译注:是指这个ticket通过renew机制累计可55. 用的时间)(只在kerberos 5中可用)
  5. 决定这个ticket的具体行为的属性和标志位。
  6. Master key过期时间
  7. 这个principal的过期时间,在此之后就不为这个principal分发ticket了。

为了使得窃取数据库中的密钥更加因难,Kerberos的实现们使用master key来对数据库进行加密,master key被关联在K/M@REALM这个principal上。即使是数据库的dump,备份和master KDC到salve KDC的propagation也会被用这个密钥加密,因此,如果想要重新加载它们,就必须知道这个密钥。

Keytab

Keytab是一个存储于client或server端的文本文件,包含了kerberos principle和该principle的master key。所以这个文件需要很小心地保存。

下一节将会安装并配置一个kerberos KDC和client,来帮助更好地理解kerberos,熟悉kerberos的基本命令。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356