keytab 到底是如何工作的?

2024-03-01

我对使用 keytab 进行身份验证有一些疑问,希望这里的好心人可以启发我

假设我有一个用户 A,他将使用在端口 1010 上运行的服务。首先,用户 A 将登录到 Active Directory 来验证自己的身份。

登录后,userA 将尝试连接到服务器以使用其服务 1010。为了让服务器验证 UserA 是谁,我需要使用setspn在 Active Directory 中注册 SPN。例如

setspn -s service1010/mydomain.com serviceaccount1

然后需要在Active Directory中生成ktab文件,例如

ktab -a serviceprincal1010/[email protected] /cdn-cgi/l/email-protection -k mykeytab.keytab

然后带上mykeytab.keytab到服务器。

在服务器上,我将使用带有登录配置的 JAAS 来查询 KDC,例如

ServicePrincipalLoginContext
{
  com.sun.security.auth.module.Krb5LoginModule required    
  principal=serviceprincal1010/[email protected] /cdn-cgi/l/email-protection 
  doNotPrompt=true useKeyTab=true keyTab=mykeytab.keytab storeKey=true;

};

从这一点开始,我就迷茫了。 userA 如何得到验证(即 userA 到底是谁?)。


你的图表是错误的。您对 kerberos 的工作原理有一个基本的误解。 (顺便说一下,这很常见)。使用 kerberos 进行身份验证的服务永远不会与 kdc 通信。它所做的就是使用它的秘密密钥 ( keytab ) 来解密用户提供的 blob。

kerberos 与 KDC 对话的唯一部分是客户端或用户端。当它尝试访问端口 1010 上的服务时,它首先向 KDC 请求该服务的服务票证。这是一个使用服务密钥加密的 blob,其中包含用户的身份。 (加上一堆其他协议相关的东西)。

如果您的服务中的端口 1010 上有一个基于 GSS 的 api,您所需要做的就是告诉该 API 密钥表在哪里,然后询问它连接上的用户 ID 是什么。您永远不需要与外部服务建立任何其他连接。我不熟悉 Java API,但验证用户凭据应该只需要一两次调用。

虽然此对话与当前使用的 Kerberos 版本并不完全匹配,但它将帮助您了解基本原理。

http://web.mit.edu/kerberos/dialogue.html http://web.mit.edu/kerberos/dialogue.html

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

keytab 到底是如何工作的? 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s

随机推荐

  • Qt 4.8 beta 和 Mac OSX Lion,Phonon 错误

    成功安装 mac OS 10 7 后 我尝试编译我的 qt 4 7 项目 我收到了很多 不支持的 mac os x 版本 的警告 因此我决定使用 Qt 4 8 beta 现在所有警告都消失了 但是 我现在使用 Phonon 时遇到链接器问题
  • 为什么window.width小于媒体查询中设置的视口宽度

    我很困惑 仍然不知道如何用合适的语言解释这一点 到目前为止 我已经使用断点并设置了媒体查询 使用的断点变量如下所示 menustatictofixed min width 900px breakpoint to ems 设置为 true 我
  • 错误:“...”未命名类型

    我有一个工作项目 重新安排一些代码后 我尝试重新编译我的项目 然后奇怪的事情开始发生 看一下编译器输出的摘录 我正在使用 MinGW G 从 Windows 上的 Eclipse 进行编译 Build of configuration De
  • 术语“Scaffold-DbContext”未被识别为 cmdlet 的名称

    我有一个包含两个项目的解决方案 一个是主项目 第二个是使用 EF Core 10 0 RC2 的项目 在第二个项目中 我使用这三个命令来安装 EF Core 并运行此 nuget 命令来安装它 Install Package Microso
  • 查找列表列表中项目的部分匹配

    我有这样的列表 l 08 00 09 00 60 False 1 0 09 00 10 00 60 False 0 3 12 00 13 00 60 False 2 0 我想检查是否有列表l有一个元素但我不知道最后一个元素的值float 我
  • 如何在 R 中使用 readHTMLTable 读取注释掉的 HTML 表

    过去 我已经能够使用 R 中的 readHTMLTable 来获取一些足球统计数据 当今年再次尝试这样做时 表格没有显示 即使它们在网页上可见 这是一个例子 http www pro football reference com boxsc
  • 从控制器构造函数中的 URL 获取参数

    我需要编写一些代码来在项目数据库中查找 ID 用户耦合到一个项目 并且所有项目都与其他对象 例如会话 有很多连接 现在 我需要在运行任何操作之前检查尝试访问会话的用户是否连接到与会话连接的同一项目 为此 我想在操作上使用 属性 MVC 创建
  • MySQL:仅在满足条件时更新字段

    是否可以在 MySQL 上执行 UPDATE 查询 仅在满足特定条件时才更新字段值 像这样的事情 UPDATE test SET CASE WHEN true THEN field 1 END WHERE id 123 换句话说 字段 仅在
  • maven antrun 插件

    我的 pom 中有以下内容
  • React Hooks 中的 Push 方法(useState)?

    如何将元素推送到 useState 数组 React hook 中 这是反应状态下的旧方法吗 或者新的东西 E g setState 推送示例 https stackoverflow com questions 41052598 react
  • 默认情况下,Spring Boot 期望视图存储在哪里?

    我正在尝试使用 Spring Boot 重写我的配置繁重的普通 Spring MVC 项目 我使用 Spring Boot Initiaizer 在 IntelliJ 中启动了一个全新的 Spring Boot 项目 并且我将采用基于 Ja
  • pandas groupby 一次用于多个数据帧/文件

    我有多个巨大的 tsv 文件 我正在尝试使用 pandas 处理它们 我想按 col3 和 col5 分组 我试过这个 import pandas as pd df pd read csv filename txt sep t g2 df
  • Web API 将对象传递给 Get 方法

    有没有办法在 Web API 的 Get 方法中将对象作为参数传递 我有以下案例 在我的 Web API 项目中 Get 方法如下所示 public IEnumerable
  • 可以在事件处理函数中删除 POSIX 计时器吗?

    问题 如果我打电话create timer与SIGEV THREAD常量存储在sigev notify我的领域sigevent结构 那么当计时器事件发生时 我的sigev notify function回调将被调用 调用是否有任何隐藏的含义
  • audioop.rms() - 为什么它与正常的 RMS 不同?

    我正在编写一个 python 函数来返回 wav 文件的响度 RMS 似乎是最好的衡量标准 用python检测并记录声音 https stackoverflow com questions 2668442 detect and record
  • 按顺序显示多个Toast的问题

    对不起 我的英语不好 我想按顺序显示两个吐司 换句话说 当第一个吐司持续时间超过第二个吐司时出现 这是我的代码 Toast makeText this Toast1 Toast LENGTH SHORT show Toast makeTex
  • 在 SwiftUI 中连续重复操作

    如何使文本字段等元素连续放大然后缩小 我有这个 struct ContentView View State var size Double 0 5 var body some View ZStack Text Hello padding s
  • 为什么 JLabel 当第一个字符时不显示“/”?

    我有一个摆动面板 里面有一个 JLabel JLabel 看起来像这样 new JLabel Foo br Bar br Foo br Bar 但它在 UI 中显示如下 Bar Foo Bar 由于某种原因 第一行就消失了 如果我去掉斜杠或
  • UDP 数据包在交付时是否保证是完整的、具有实际意义的?

    众所周知 UDP 用户数据报协议 并不安全 因为用它发送的数据包的顺序可能不按顺序传送 甚至根本不按顺序传送 但是 如果发送了 UDP 数据包 该数据包中的信息在实际意义上 99 99 及以上 是否保证正确 在实际意义上 99 99 及以上
  • keytab 到底是如何工作的?

    我对使用 keytab 进行身份验证有一些疑问 希望这里的好心人可以启发我 假设我有一个用户 A 他将使用在端口 1010 上运行的服务 首先 用户 A 将登录到 Active Directory 来验证自己的身份 登录后 userA 将尝