问题标签 [keytab]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
161 浏览

keycloak - Kerberos - 密钥表文件仅适用于特定密码

我正在尝试在 Windows 域上为 Keycloak 实现 Kerberos 集成。我在 Keycloak 中添加了一个 ldap 提供程序,并设置了与 AD 的连接,一切正常。

我正在沙盒环境中对其进行测试 域:SANDBOX.NET DC:KEYTEST-DC 运行 keycloak 的应用服务器:KEYTEST-APP 使用 kerberos 测试自动登录的客户端机器:KEYTEST-CLIENT

我从以下操作开始(使用 DC 管理员帐户在 DC 上完成)

  1. 创建一个与运行keycloak的机器名同名的新AD服务用户名:KEYTEST-APP用户登录名:HTTP/keytest-app.sandbox.net密码:S@ndM@n

  2. 设置此用户的 spn setspn -A HTTP/keytest-app.sandbox.net@SANDBOX.NET KEYTEST-APP

  3. 创建 KeyTab 文件

    ktpass /out keycloak.keytab /princ HTTP/keytest-app.sandbox.net@SANDBOX.NET /mapuser KEYTEST-APP@SANDBOX.NET /pass S@ndM@n

  4. 将 keytab 文件复制到应用服务器并使用它在 keycloak 中配置 kerberos Kerberos 领域:SANDBOX.NET 服务器主体:HTTP/keytest-app.sandbox.net@SANDBOX.NET Keytab:keytab 文件的位置

我进行了初步测试,一切正常。

然后我想记录整个过程,所以我重新开始,但选择 svc_keycloak 作为我的 AD 服务用户的名称,因为我发现其他文档没有指定名称必须与应用服务器的名称匹配。我也选择了一个不同的密码,但是当我测试它时它不起作用。密钥斗篷中的错误:SPNEGO login failed: java.security.PrivilegedActionException: GSSException: Failure unspecified at GSS-API level (Mechanism level: Checksum failed)

最终我发现,当我在 ktpass 命令中使用 S@ndM@n 密码时,它只适用于 svc_keycloak 用户,即使这是来自 KEYTEST-APP 用户的密码。

然后我做了很多测试,删除了 KEYTEST-APP 用户,创建了新的 DC 管理员帐户,更改了密码。然而,只有当我在 ktpass 命令中使用 S@ndM@n 作为密码时,kerberos 才有效(无论我尝试过什么用户)。

最后我从零开始,新的 DC,新的应用服务器,从头开始配置一切。这次我从新的服务用户开始:svc_keycloak 和一个全新的密码,但在 keycloak 中再次出现同样的错误。然后我再次创建了用户 KEYTEST-APP 并给它密码 S@ndM@n(也许我应该在这里选择一个不同的密码,我应该从头开始)现在一切都恢复了。使用 svc_keycloak 进行测试,如果我在 ktpass 命令中将 S@ndM@n 作为密码,它也同样有效。

删除KEYTEST-APP用户后它甚至继续工作,所以密码仍然必须存储在某个地方?我注意到当我删除 KEYTEST-APP 用户时,执行时我仍然得到服务主体名称: setspn -l KEYTEST-APP

经过一番研究(因为我对kerberos的了解非常有限)我发现这是因为KEYTEST-APP也是一个电脑账号。据我所知,每个计算机帐户都有自己的密码,但这些密码是完全随机的。

我只是想找出为什么它只适用于 S@ndM@n 密码。这是因为这是我为与应用服务器同名的用户使用的第一个密码吗?那么必须有一些方法来更新这个?或者也许我忽略了一些东西,有人在我的配置中看到了问题。

谢谢,雷米

0 投票
0 回答
38 浏览

windows - 为所有 AD 用户提供服务授权的 Kerberos 密钥表

假设我为 someUserAccount 的服务生成了 keytab 文件。我也有一个注册到 someUserAccount 的 SPN。我想授权该服务,即仅使用用户名和密码从 KDC 为任何 AD 用户获取票证。在我的场景中或者完全使用 Kerberos 有可能吗?

0 投票
0 回答
21 浏览

java - 如何使用 keytab 文件的输入流解析 Web 服务的 TGS

keytab 文件存储在数据库中,您不想在服务器上生成 keytab 文件。如何使用 keytab 文件的输入流解析 Web 服务的 TGS。我的项目使用 java

0 投票
0 回答
29 浏览

apache-kafka - 使用 Kerberos 成为 Kafka 消费者

我是新手Apache-kafka,我参与了一个项目,我必须在RHEL7. 目标是订阅外部服务器中的主题。

Apache Kafka在本地安装并设置了一个示例生产者和一个示例消费者。它可以工作并且Kafka Consumer能够从生产者那里接收数据。

但是,成为外部服务器的消费者更加复杂,因为它需要Kerberos authentication使用keytab文件。我有点迷失在哪里开始。

是否有可用于连接和检查消息流的示例使用者?
除了生成密钥表文件之外,是否Kerberos authentication需要一些安装?
最好的方法是什么?

0 投票
0 回答
78 浏览

hadoop - Zabbix 5.4.2 - 使用 Kerberos 和 keytab 监控 Haddop 的 HTTP 代理

我正在尝试监视一个 hadoop 集群,并且 CDH 通过 keytab 配置了 Kerberos 身份验证。因此,要访问上下文路径 /jmx 和 /cluster,我需要对用户和密钥表进行身份验证。

我根据文档配置了 Zabbix 5.4.2,在 kerberos 领域创建了一个 zabbix 用户,创建了 keytab,在容器中使用 curl -v --negotiate -u 进行了测试:http ://example.com ,它的工作原理是预期的。

之后我尝试在 Zabbix 5.4.2 上配置内置的 Hadoop HTTP 代理,但没有成功。NameNode 和 ResourceManager 主机和端口是正确的,因为状态为 UP(1),但其余的监控给我 401 Unauthorized 我找不到原因。

我尝试了一些但没有用的东西:

  • 在 zabbix-server 容器中启用用户 zabbix 的主目录,复制 keytab,krb5.conf 并添加一个带有“kinit -kt”的 .bashrc
  • 尝试使用 root 用户、zabbix 用户、/etc/apache2/ 或 /etc/ 中的不同权限和文件的 kinit

有人有一些建议或可能知道它可能是什么?

0 投票
0 回答
21 浏览

apache-spark - 我可以从另一个 Kerberized 集群中运行的 spark 连接到 Kerberized Kafka 吗?

我正在尝试将一些记录从在另一个 Kerberized 集群(不同域)中运行的 Spark 进程中放入 Kerberized 的 Kafka 集群中。我认为问题在于尝试逐条读取 spark 记录中的数据集并将它们放入 kafka(因此需要与两个集群保持活动连接)。请帮忙。

我尝试使用 System.setProperty() 在运行时使用 jaas 文件设置 VM 属性 -Djava.security.auth.login.config,其中主体和 keytab 对应于 kafka 集群,但没有运气。

在使用 spark2-submit 提交 spark 进程之前,我需要使用与 Hadoop Cluster 对应的 keytab 进行 kinit 以使 spark 进程运行。

0 投票
1 回答
41 浏览

java - 有没有办法使用仅凭据而不是 keytabs 的 java 客户端 API 连接到 kerberized 服务

我编写了一个使用 keytabs 访问 hadoop 的代码,但我希望它只使用凭据而不是 keytabs,有没有办法做到这一点?以下是我目前正在使用的代码 -

我遇到几个线程说有一种方法叫做

UserGroupInformation.loginUserFromSubject(主题)

但我在 UserGroupInformation 类中看不到该方法。我尝试了 2.2.0 和 3.1.1 版本的 hadoop-commons,但是这两种方法都不可用。

更新 :

我尝试使用 JAAS 和以下代码进行身份验证:

JAAS 文件内容是 -

以下是控制台上的输出和错误 -

它仍然没有工作,任何帮助将不胜感激。

0 投票
0 回答
26 浏览

bash - 在 Bash 中从 Kerberos 密钥表文件分配变量

我想使用 Bash 命令从Hadoop连接到外部数据库。首先,我声明了一些变量,例如用户和密码:

当我连接到外部数据库时,我使用用户名和密码 Bash 参数:

我想要的是从代码中隐藏密码。例如,我有keytab文件,那么我可以使用 keytab 文件作为我的凭据吗?或者如何解决问题?

0 投票
2 回答
75 浏览

hbase - 在没有 kinit 的情况下尝试访问 Kerberos HBase 时无法找到任何 Kerberos TGT

我有一个非常简单的 Scala HBase GET 应用程序。我试图建立如下连接:

每当我运行它时,我都会收到如下错误:

我使用的是 Windows,所以我在 C: 驱动器的根目录下放了 4 个文件:

我的 C:\jaas.conf :

我在 Cloudera CDH 版本 6.3.2 上。从 Cloudera 管理器下载 hbase-client-config(ssl-client.xml、hdfs-site.xml、hbase-site.xml、core-site.xml),并在 IntelliJ 的资源文件夹下添加 HBase 客户端配置文件。我的 hbase 客户端配置文件

jaas.conf在 IntelliJ 中设置 VM 选项,运行/调试配置 -> 应用程序 -> 构建和运行 -> VM 选项。我的智能应用程序虚拟机选项配置

当应用程序启动时,我能够看到jaas.conf文件正在被占用jaas.conf-logs

即使它说它将使用密钥表,我仍然会收到这样的错误:Kerberos-error-message

我的 Cloudera 版本:6.3.2

斯卡拉版本:2.11.12

HBase 客户端:2.1.0

有没有人有任何想法?当我提供 jaas.conf 时,Java 身份验证系统是否不会自行获取 Kerberos 票证?

0 投票
0 回答
67 浏览

active-directory - “更新”密钥表的过程是什么?

我们已经在我们的 AD 环境中确定了一些设置为仅使用 DES 密钥的密钥表。此外,这些主体还在 ADDS 中将其 USEDESKEYONLY 属性设置为 true。我们的目标是“更新”密钥表以使用 AES。

目前,我相信我们将不得不通过 setspn 发布 SPN,更改服务帐户的密码(稍后使用)将 USEDESKEYONLY 属性更新为 false,设置为“支持 AES-256”,使用 ktpass 重新生成密钥表使用适当的密码和-mapuser 将新密码返回到已发布的 SPN,然后将密钥表二进制文件传输回保存密钥表的服务 (SSO)。所有这些都将发生在维护窗口中。

有人能确认我是否走在正确的道路上吗?谁能推荐一个我可以进一步测试的开源服务(目前没有使用 SSO 服务的测试环境)?