kerberos 协议初探

Posted niceshot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kerberos 协议初探相关的知识,希望对你有一定的参考价值。

技术图片

kerberos原理

一个客户端要访问某个服务时,先要到KDC去认证自己,并获得访问票据TGT
然后客户端再拿着这个访问票据到自己真实想要访问的服务去获得访问授权,
然后真实的进行访问

在kerberos中,KDC有两部分组成:

  1. Authentication Server,用来认证用户,即验证用户存在,且密码正确
  2. Ticket-Granting Service,用来给客户端生成,可以访问客户端想要访问的那个服务的票据TGT

三个请求步骤

整体来看,kerberos分为三个请求来回,假设一个client要访问服务server

  1. client到Authentication Server认证,并获得跟Ticket-Granting Service通信的加密key,Client/TGS SessionKey和能访问Client/TGS SessionKey的票据
  2. client使用Client/TGS SessionKey跟Ticket-Granting Service进行安全通信,获得能访问server票据
  3. client在拿到第二步的票据去访问服务server

技术图片

双向验证

kerberos是双向验证的。实现双向验证的原理:
其上三步通信中,每一步的请求和返回都包含两个数据。一份是发送方想要获取认证的请求,一份是发送方希望接收方认证自己的请求数据。

基础术语

Principals

在kerberos网络中,认证双方的指代,可以服务,也可以是个人
Principals是唯一的,KDC是基于Principals来判定它有没有访问某个服务的权限

一个Principals的基本构造为:
primary/instance@realm

其中:

  • primary是具体的用户名或服务名,比如用户名:jdoe, 服务名:nfs
  • instance 是该用户或服务具体的角色/机器定位,比如jdoe/admin, ftp/bigmachine.corp.example.com,后者表示ftp这个服务在bigmachine.corp.example.com这host机器上。特别地,如果primary是一个服务,那么其instance必填。而如果primary是用户,则instance不必填
  • realm 一个逻辑领域,指代kerberos网络的范围,通常是大写域名,比如CORP.EXAMPLE.COM

以下是一些合法的principal定义

jdoe

jdoe/admin

jdoe/admin@CORP.EXAMPLE.COM

nfs/host.corp.example.com@CORP.EXAMPLE.COM

host/corp.example.com@CORP.EXAMPLE.COM

Realms

Realms 是kerberos整个网络的逻辑定义,相当于一个域,所以通常也用域名来定义。Realm可以集成,也可以没有集成但又有相应的关系
技术图片

KDC

存储有所有Principals的账号信息,用于认证用户,并分发Principal A访问Principal B的票据
KDC本身可以做主从,从而实现高可用

keytab

一个存储了Principal信息的文件,其中包含用户名跟加密key(相当于密码)。其目的是,可以通过kinit命令,以脚本的方式去KDC认证,并缓存票据TGT。这样做能够使得一些系统之间的授权成为可能,也使得无人工参与的脚本自动化认证成为可能。因为普通的登录认证,需要用户交互,去输入用户名密码。

一个典型的kinit命令如下:

kinit username@ADS.IU.EDU -k -t mykeytab; myscript

mykeytab是Keytab的文件名,由于其中可能有多个principal的账号信息,所以这里显示的基于username@ADS.IU.EDU这个用户id,显示的去找文件中的密码,完成认证。
认证完后,执行后续想要操作的myscript脚本。

当日Kinit命令本身也可以不使用Keytab文件,而直接用户交互的方式,去输入密码,完整认证。

整个kerberos的逻辑视图

技术图片

其中clients和Application Servers都是Principal

参考资料

http://www.nosqlnotes.com/technotes/kerberos-protocol/

https://www.zhihu.com/question/22177404

https://docs.oracle.com/cd/E36784_01/html/E37126/kintro-30.html#scrolltoc
https://kb.iu.edu/d/aumh

https://blog.csdn.net/u011026329/article/details/79167884

https://web.mit.edu/kerberos/krb5-1.12/doc/admin/conf_files/krb5_conf.html

https://godatadriven.com/blog/kerberos-basics-and-installing-a-kdc/










以上是关于kerberos 协议初探的主要内容,如果未能解决你的问题,请参考以下文章

Kerberos协议详解

Kerberos简介

Kerberos协议原理

Kerberos 密码更改协议

Kerberos介绍

Kerberos协议