Kerberos

2023-11-19

kerberos身份认证过程:
    第一步:账号和KDC互相认证;
    账号A向KDC证明自己的身份:
        1.账号A首先会把自己的密码hash,得到一把秘钥Kclt;
        2.Kclt会把当前的时间戳加密,生成一个字符串;使用{时间戳}Kclt来表示;
        3.将生成的字符串{时间戳}Kclt、账号A的信息,以及一段随机数作为请求发送给KDC。
            请求:AS_REQ="{时间戳}Kclt、账号A的相关信息,随机字符串"
        4.KDC收到请求之后,会识别出这是账号A发来的信息,于是就使用与账号A相对应的经过相同方式hash过密码而得到的Kclt来解密账号A发来的请求,如果能解开则可以确认是账号A本人了;确认过眼神,是一样秘钥的人;(从这一步可以看出来账号A和KDC端拥有一样的密码);
    KDC向账号A证明自己的身份:
        理论上KDC使用同样的方法来hash密码然后将加密时间戳所得的字符串、自己的信息以及随机数发送给账号A也就可以证明自己的身份了,但是这个机制会让KDC非常的忙碌;所以实际上KDC使用的是下面的方式:
            1.首先KDC会生成两把一样的秘钥Kclt-kdc,用来作为日后账号A和KDC之间相互认证之用;这样就省去了每次KDC需要根据客户端发来的请求而确认账号身份的步骤;但是这对秘钥也是跟客户一一对应的,也就是说KDC会为每个客户都生成一对相同的Kclt-Kdc秘钥对;按理说应该把秘钥对中的一个分给其对应的客户端,但是保管秘钥对于KDC也是一种负担,所以它将保管自己秘钥的工作也交给了账号,所以每次客户端的账号需要KDC认证时,就将KDC的秘钥再传送给KDC端,不难想到,当然不是直接将自己的秘钥传递给账号啦,虽然账号自己有跟KDC一模一样的秘钥;KDC会把自己的独有的密码经过hash后生成一个名为Kkdc的秘钥;然后再用它加密委托给账号A管理的秘钥(Kclt-kdc)以及账号A的信息而得到的字符串称为TGT,然后KDC端回复客户端AS_REP,客户端账号收到回答之后,使用Kclt解密下文红色区域,通过里面的时间戳和随机字符串来确定KDC的真实性,然后保存Kclt-kdc和TGT,用以日后请求KDC时使用;TGT={账号A的相关信息,Kclt-kdc}Kkdc;
                回答:AS_REP="TGT、{Kclt-kdc,时间戳,随机字符串}Kclt"
                    蓝色区域的作用:每次客户端账号请求KDC时,都会发送TGT给KDC端,然后KDC使用Kkdc解密TGT得到与账号认证时使用的Kclt-kdc这个秘钥;
                    红色区域的作用:KDC端将用于与账号之间认证时使用的Kclt-kdc这个秘钥加密发送给客户端的账号;
                    这样KDC端就能通过仅保存经过hash自己密码所得的Kkdc这个秘钥就能与不同账号建立可信连接了;
                    
                    
    第二步:账号A请KDC帮忙认证资源B:
        1.首先账号A会给KDC发送一个名为TGS_REQ的请求;TGS_REQ="TGT,{账号A的相关信息,时间戳}Kclt-Kkdc,资源B的相关信息"
        2.KDC 收到TGS_REQ后,先用Kkdc解密TGT得到Kclt-kdc,再用Kclt-kdc和账号A互相认证身份;一旦确认过眼神,是要等待的人,然后KDC就会帮助A和B牵线系红绳了;
        3.KDC会再生成两把同样的秘钥供A和B之间使用(怕嫁错新郎,牵错新娘),这个秘钥称为Kclt-src,一把交给A一把委托A交给B;其中一把经过Kclt-kdc加密后发送给账号A,为了A不会受假的资源B所骗,KDC把B的密码hash成Ksrv,然后用它加密那把委托A交给B的Kclt-srv再一起发送给账号A,我们把这个被加密后的数据叫做Ticket,因为只有真正的B才能够解密Ticket,所以可以用来确认B的身份;Ticket={账号A的信息,Kclt-sev}Ksrv
            TGS_REP="{Kclt-srv}Kclt-Kdc,Ticket"
        4.账号A收到TGS_RWP之后先用Kclt-Kdc解开紫色区域,得到Kclt-srv,然后保留Ticket用来获取资源B时发给B;接下来如果需要多次访问资源B都可以使用同一个Ticket,不需要每次都向KDC申请,从而减轻了KDC的负担;
    第三步:账号A和资源B互相认证:
        1.账号A给资源B发送{账号A的信息,时间戳}Kclt-srv以及Ticket,我们称这个请求为AP_REQ;AP_REQ="{账号A的信息,时间戳}Kclt-srv,Ticket"
        2.如果资源B是真的它就可以解开Ticket,从而得到Kclt-srv,然后就可以解开"{账号A的信息,时间戳}Kclt-srv",从而确认账号A的身份,因为只有A和B拥有Kclt-srv这个秘钥;然后回复AP_REP来向A证明自己是真的;AP_REP={时间戳}Kclt-srv
        3.账号A使用Kclt-srv解密B发来的AP_REP,得到时间戳来判断资源B的真假;
        
                    
 注:根据wireshark网络分析就这么简单一书做的学习笔记,如有错误,欢迎指正;侵删;

 这本书虽然很薄但是写的非常有意思,很适合入门阅读,推荐给能看见这篇笔记的人;      

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kerberos 的相关文章

  • Kerberos、委派以及如何正确执行此操作?

    我有两个独立的自制应用程序 需要在它们之间进行通信 一个是前端应用程序 实际上是 asp net 另一个是会计应用程序的后端接口 后端接口不是专门为此前端创建的 它是许多其他应用程序用来与我们的产品集成的通用接口 为了方便用户 我们希望在前
  • asp.net通过kerberos将Windows身份验证集成到sql服务器

    请问有人可以提供一种简单 直接的方法来启用 ASP NET gt Kerberos gt Sql Server 吗 我们有客户端机器 gt 网络服务器 gt 数据库服务器 客户端坚持要求站点必须拉取 Windows 登录名而不是提示 因此需
  • Hadoop kerberos 票证自动续订

    我在使用以下命令从 HDFS 下载大文件夹时遇到一些问题 hadoop fs get path to hdfs big folder 该文件夹很大 几乎 3TB kerberos 票证的生命周期为 10 小时 可续订生命周期为 7 天 下载
  • 使用 Python 以无密码的用户身份登录 Windows

    我这里有一个情况 使用Python 我创建了一个进程 以系统或管理员用户身份运行 并且我需要使用不同的用户名 无需密码 调用应用程序 因此 阅读下面的链接 结论是可能的 使用 Kerberos 模拟另一个没有密码的用户 但我没有找到任何用
  • 使用 Java 和 Kerberos 以不同用户身份创建进程

    我正在开发一个Java服务器应用程序 在Windows下作为服务运行 并希望实现以下场景 用户向服务器发出 POST 请求 用户通过 Kerberos SPNEGO 企业环境中的 SSO 进行身份验证 该服务创建一个新的 Java 进程 该
  • 使用 Symfony2 进行 Kerberos 身份验证

    我正在尝试在 Symfony2 中使用 kerberos 对用户进行身份验证 但我在途中有点迷失 当用户通过身份验证时 Apache 服务器返回 SERVER REMOTE USER 变量 给我他的用户名 我可以恢复这个值 request
  • Zookeeper/SASL 校验和失败

    如何修复生成此错误的问题 WARN NIOServerCxn Factory 0 0 0 0 0 0 0 0 2181 ZooKeeperServer 1040 Client failed to SASL authenticate java
  • 用于生产用途的 Spring Security kerberos 扩展?

    Spring Security Kerberos 扩展在网站上被列为版本 1 0M2Spring 源网站 http static springsource org spring security site extensions krb in
  • Wildfly 8.2 中的 Kerberos sql server 数据源

    我在 Wildfly 8 2 0 上设置针对 MS Sql Server 的 Kerberos 集成身份验证时遇到问题 这是我到目前为止所做的 设法在 Wildfly 9 0 2 上运行它 只是因为 Wildfly 9 包含 新 登录模块类
  • 监控显卡显存(python代码)

    一 前言 我和我同学的代码 分别占用14G显存 而显卡的显存只有24G 没有办法同时跑 所以 他先跑 我的代码时刻监控显存的使用情况 只要显卡显存大于14G 我的代码就自动启动 二 代码 import pynvml import time
  • GSSException:[..] 不支持/启用具有 HMAC SHA1-96 的加密类型 AES256CTS 模式

    将域用户设置为支持 Kerberos 令牌的 AES 加密 Windows Server 2008R2 后 在 Web 应用程序服务器端 我们遇到以下异常 GSSException GSS API 级别未指定故障 机制级别 加密类型 AES
  • 使用 Kerberos 对 Windows 进行 Ansible 不起作用

    我尝试使用 Ansible 1 9 0 1 使用域用户名配置 Windows 服务器 我已经成功设置了 Linux Ansible 控制盒 并且能够使用基本身份验证来运行 ansible ansible playbook play 但是 使
  • Kerberos - SPN 和密钥表

    我有一个项目 其中嵌入了启用了 SPNEGO 的 jetty 我希望能够在本地运行该项目以用于开发目的 启用 SPNEGO 我的问题是 SPN 和 keytab 是否与特定服务器相关联 或者我可以在服务的多个实例上使用同一组吗 Kerber
  • Spring Security Kerberos + AD,校验和失败

    我正在尝试使用 Active Directory 凭据执行 Spring Security Kerberos 如中所述http docs spring io spring security kerberos docs 1 0 1 RELEA
  • 当客户端和服务器位于同一台计算机上时,Kerberos 身份验证不运行

    当尝试从运行 jboss 服务器的同一台计算机访问应用程序时 出现以下错误 org springframework security authentication BadCredentialsException Kerberos valid
  • 使用 Kerberos S4U 扩展(在 Java 8 中引入)通过 JDBC 连接到数据库

    自从我用 Java 编写代码以来已经有一段时间了 所以我可能遗漏了一些明显的东西 我想通过 JDBC 连接到数据库 我需要支持很多 SQL Server MySQL 等 但是 我想使用 Java 8 中添加的 Microsoft S4U J
  • Java 在不应该使用 Kerberos TicketCache 时自动使用它?

    我们有一个可以与外部服务通信的服务器端应用程序 这取决于我们的配置 我们是否使用呼叫我们的用户的凭据 预配置的凭据对这些服务进行身份验证 或者根本不进行身份验证 外部服务可以使用 HTTP Negotiate 身份验证 对于我们的自定义 H
  • javax.naming.AuthenticationException

    我正在尝试使用我的 Windows 凭据和 NTLM 为 ActiveDirectory 创建上下文 客户端和服务器都是 Windows 这是我的代码 public void func try URL configURL getClass
  • 无法获取 Master Kerberos 主体以用作 Talend Batch 作业的续订者

    我们正在尝试使用 talend 批处理 spark 作业来访问 Kerberos 集群中的配置单元 但我们收到以下 无法获取主 Kerberos 主体以用作更新程序 错误 通过使用 talend 中的标准作业 非 Spark 我们可以毫无问
  • 如何用Java实现Kerberos协议转换? (S4U2自我)

    Edit 现在我知道我需要什么了 我需要在Java中实现Kerberos协议转换 S4U2Self Net 中有示例 但没有 Java 的示例 有这个第三方库Java 版 Quest 单点登录 http www quest com sing

随机推荐

  • 如何理解和解决高并发

    如何理解高并发 高并发指的两方面 提升硬件 负载均衡 使用缓存 缓存一致性如何保证 限流 DNS负载均衡 线程池和分布式锁 总结 高并发指的两方面 同一时刻有大量的请求访问系统 有大量的请求并行访问系统 当大量请求短时间内涌入系统的时候 我
  • 2018中国汽车企业排行榜TOP10

    看排名 懂中国汽车 Aming 汽车行业变化很快 但是从上市车企的情况来看 可以看到具体的财报数字 因而可以知道一个更具体的发展情况 不过这次的排行榜主要针对2018年上半年中国已经上市的汽车企业 特别推出利润排行榜与销量排行榜 同时还有利
  • Dockerfile讲解和案例分享

    目录 dockerfile是在容器外部 构建三部曲 dockerfile基本知识 dockerfile执行流程 dockerfile 常用保留字 FROM MAINTAINER RUN EXPOSE WORKDIR USER ENV ADD
  • 40个学术网站

    40个学术网站 满足你的科研需求 2018 03 06 美国留学那点事 文 中外学术情报 微信号 Academic Information 科研工作者每天日常莫过于看文献 做实验 写论文 人生最郁闷的事情不过于是导师说 那个XX 帮我下载下
  • java secretkey用法_Java SecretKeyFactory.generateSecret方法代码示例

    本文整理汇总了Java中javax crypto SecretKeyFactory generateSecret方法的典型用法代码示例 如果您正苦于以下问题 Java SecretKeyFactory generateSecret方法的具体
  • Rust- 类型转换

    Rust is a statically typed language which means that it emphasizes on knowing the types of all variables at compile time
  • Python全栈开发【基础-05】基本数据类型

    专栏介绍 本专栏为Python全栈开发系列文章 技术包括Python基础 函数 文件 面向对象 网络编程 并发编程 MySQL数据库 HTML JavaScript CSS JQuery bootstrap WSGI Django Flas
  • LeetCode 124. 二叉树中的最大路径和 Python

    给定一个非空二叉树 返回其最大路径和 本题中 路径被定义为一条从树中任意节点出发 达到任意节点的序列 该路径至少包含一个节点 且不一定经过根节点 示例 1 输入 1 2 3 1 2 3 输出 6 示例 2 输入 10 9 20 null n
  • n-gram模型中的平滑方法

    当使用n gram模型对测试语料中的句子进行评估时 如果句子中包含在训练集中未出现的n元语法 则计算出来句子出现的概率为0 例如上一篇博客语言模型和n元语法中的例子 此时用该模型来计算下面句子的概率 因此 必须分配给所有可能出现的字符串一个
  • 关于Vue.js和React.js,听听国外的开发者怎么说?

    VueJS 与 ReactJS 到底怎么样如何 听听别人怎么说 使用所有新的库和框架 很难跟上所有这些库和框架 也就是说 这就需要您决定哪些是值得花时间的 让我们看看人们说什么 和Vue JS一起工作是很愉快的 我发现学习曲线很浅 然而 这
  • 【LeetCode75】第五十九题 第N个泰波那契数

    目录 题目 示例 分析 代码 题目 示例 分析 题目顾名思义 让我们求出第N个泰波那契数 也就是除了开头三个数之外 第四个数开始就是等于前三个数之和 不要和斐波那契数弄混了 斐波那契是前两个数的和 泰波那契是前三个数的和 也就是说当前数 我
  • docker容器内修改文件

    1 找到容器对应的ID 使用docker ps命令找到对应的镜像id 2 根据容器id进入到对应文件夹 执行命令 docker exec it 镜像id bin bash 3 进入对应目录 以MySQL为例 执行命令cd etc mysql
  • HTML学习

    HTML 我的第一个网页 基本标签 图片标签 链接标签 列表 表格 媒体元素 页面结构分析 iframe内联框架 表单 我的第一个网页
  • Hystrix 简单请求合并

    频繁的调用provider接太浪费了 就有了将多个请求合并为一个请求的方式 首先在provider中提供一个请求合并的接口 RestController public class UserController 既可以处理多个 也可以处理单个
  • elk之查询(单个或多个)type所有数据,条件查询,分页查询,排序

    java连接es 1 接口 查询 单个或多个 type所有数据 条件查询 分页查询 排序 param client param indexName param typeName public void searchAllStudent Tr
  • 服务计算hw7

    任务目标 设计一个 web 小应用 展示静态文件服务 js 请求支持 模板输出 表单处理 Filter 中间件设计等方面的能力 不需要数据库支持 基本要求 支持静态文件服务 支持简单 js 访问 提交表单 并输出一个表格 对 unknown
  • 服务器乱码专栏问题一:String.getBytes()获取值乱码

    本文建议阅读时长 15mins 前记 最近笔者工作比较繁忙 导致本来应该有很多博客需要填坑 一直也没有静下心来好好整理下 今天蹭着夜深人静加之阵阵柔和的轻音乐正好先写上一篇 也算是为自己乱码专栏开个头 当然本专栏主要解决Tomcat服务器以
  • 『虫无涯→_→读书推荐02期』|全面系统的〖Effective软件测试〗带你完成所有不同类型的测试,GO

    目录 我看的书 我的书评 推荐理由 书籍的作者 书籍内容 赠书活动 我看的书 首次看到这本书的封面的时候 我被那个数字惊呆了 助理软件研发提升10倍质量 这对我产生了足够了吸引力 因为这个数字是非常的客观的 至于书籍内容 大家别急 且听我慢
  • QPainter::setPen: Painter not active 解决方案

    今天在写代码的时候用到QPainter在窗口中绘制一些图形 出现错误 QPainter setPen Painter not active 百度上搜了也问了chatGPT没有很好的答案 无奈只好打开Qt API找问题 在Qt 文档中发现如下
  • Kerberos

    kerberos身份认证过程 第一步 账号和KDC互相认证 账号A向KDC证明自己的身份 1 账号A首先会把自己的密码hash 得到一把秘钥Kclt 2 Kclt会把当前的时间戳加密 生成一个字符串 使用 时间戳 Kclt来表示 3 将生成