重要术语

1. KDC

全称:key distributed center

作用:整个安全认证过程的票据生成管理服务,其中包含两个服务,AS和TGS

2. AS

全称:authentication service

作用:为client生成TGT的服务

3. TGS

全称:ticket granting service

作用:为client生成某个服务的ticket

4. AD

全称:account database

作用:存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT

5. TGT

全称:ticket-granting ticket

作用:用于获取ticket的票据

6.client

想访问某个server的客户端

7. server

提供某种业务的服务

认证流程

概述

图1 kerberos认证流程

图1展示了kerberos的认证流程,总体分为3步。

  1. client与AS交互
  2. client与TGS交互
  3. client与server交互
详细分析

kerberos为什么要采用3步交互的形式来完成安全认证,那就要从kerberos的使用场景说起。

相比kerberos,https可能更为熟悉一点,通过证书和非对称加密的方式,让客户端可以安全的访问服务端,但这仅仅是客户端安全,通过校验,客户端可以保证服务端是安全可靠的,而服务端却无法得知客户端是不是安全可靠的。这也是互联网的一种特性。而kerberos可以支持双向认证,就是说,可以保证客户端访问的服务端是安全可靠的,服务端回复的客户端也是安全可靠的。

想证明client和server都是可靠的,必然要引入第三方公证平台,这里就是AS和TGS两个服务。

  1. client向kerberos服务请求,希望获取访问server的权限。kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法。这就是AS服务完成的工作,通过在AD中存储黑名单和白名单来区分client。成功后,返回AS返回TGT给client。
  2. client得到了TGT后,继续向kerberos请求,希望获取访问server的权限。kerberos又得到了这个消息,这时候通过client消息中的TGT,判断出了client拥有了这个权限,给了client访问server的权限ticket。
  3. client得到ticket后,终于可以成功访问server。这个ticket只是针对这个server,其他server需要像TGS申请。

通过这3步,一次请求就完成了。当然这里会有个问题,这样也没比https快啊。解释一下

1. 整个过程TGT的获取只需要一次,其中有超时的概念,时间范围内TGT都是有效的,也就是说一般情况访问server只需要直接拿到ticket即可

2. 整个过程采用的是对称加密,相对于非对称加密会有性能上的优势

3. kerberos的用户管理很方便,只需要更新AD中的名单即可

当然整个过程的通信都是加密的,这里设计到两层加密,因为所有的认证都是通过client,也就是说kerberos没有和server直接交互,这样的原因是kerberos并不知道server的状态,也无法保证同时和server,client之间通信的顺序,由client转发可以让client保证流程顺序。

第一层加密,kerberos对发给server数据的加密,防止client得到这些信息篡改。

第二层加密,kerberos对发给client数据的加密,防止其他网络监听者得到这些信息。

client和server的通信也是如此。

转自:https://www.cnblogs.com/ulysses-you/p/8107862.html

kerberos简单介绍的更多相关文章

  1. LDAP服务器的概念和原理简单介绍

    LDAP服务器的概念和原理简单介绍 1. 目录服务 目录是一个为查询.浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样.目录数据库和关系数据库不 ...

  2. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  3. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  4. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  5. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  6. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  7. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  8. iOS-iOS开发简单介绍

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  9. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

随机推荐

  1. Win10升级.NET Framework 3.5或2.0遇到错误0x800f081f怎么办

    为了让win10系统更好地运行游戏,很多玩家都会在电脑中安装.NET Framework 3.5或.NET Framework 2.0.不过,部分用户在更新升级.NET Framework 3.5和2 ...

  2. 056、macvlan网络结构分析(2019-03-25 周一)

    参考https://www.cnblogs.com/CloudMan6/p/7383919.html   macvlan不依赖linux bridge   brctl show 可以确认没有创建新的b ...

  3. Scrapy基础01

    一.Scarpy简介 Scrapy基于事件驱动网络框架 Twisted 编写.(Event-driven networking) 因此,Scrapy基于并发性考虑由非阻塞(即异步)的实现. 参考:武S ...

  4. 解决浏览器跨域限制方案之WebSocket

    WebSocket是在HTML5中引入的浏览器与服务端的通信协议,可以类比HTTP. 可以在支持HTML5的浏览器版本中使用WebSocket进行数据通信,常见的案例是使用WebSocket进行实时数 ...

  5. C# string 保留数字英文字母

    using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressi ...

  6. svn 在show log 时候出现 want to go offline

    今天终于把SVN服务器给配置好了,可以正常显示log信息了. 这周以来一直都在想着怎样解决svn log 显示 no date 这一问题,一时间不知道是怎么回事,上网都没能找到很好的解决方法.今天在使 ...

  7. Sqlserver直接附加数据库和设置sa密码

    1.exec sp_attach_db 'test','E:\db\test.mdf','E:\db\test_log.ldf' 2.sp_password Null,'123','sa' 推荐一个微 ...

  8. Mybatis中#{}和${}传参的区别及#和$的区别小结

    最近在用mybatis,之前用过ibatis,总体来说差不多,不过还是遇到了不少问题,再次记录下, 比如说用#{},和 ${}传参的区别, 使用#传入参数是,sql语句解析是会加上"&quo ...

  9. string赋值和操作

    string赋值 string s1; //默认构造函数,s1为空串 string s1(s2); //将s2初始化为s1的一个副本 string s3("value"); //将 ...

  10. Java基础_0310:引用传递

    引用传递 引用传递是Java之中最让初学者费解的概念,而在实际的开发之中,引用传递又有着非常重要的作用: 引用传递的核心在于同一块堆内存空间被不同的栈内存所指向: 范例:第一道引用传递范例 class ...