不同服务之间的 Kerberos 委托

Posted

技术标签:

【中文标题】不同服务之间的 Kerberos 委托【英文标题】:Kerberos delegation between different services 【发布时间】:2015-11-29 02:49:11 【问题描述】:

我们对 httpd 网络服务器进行了如下设置,如下所示:

以下场景: 服务器 A 从浏览器获取请求并执行一些操作并创建一个新请求并将其发送到 服务器 B用户 X服务器 B 上进行了身份验证,但 用户 Y 没有(而且不应该这样做)。由于 A 正在创建一个新请求,B 认为 Y 已经发送了请求,因此拒绝了它。删除服务器 A 不是一种选择。我该如何解决这个问题。你能帮忙吗?

【问题讨论】:

【参考方案1】:

这可以通过委托来解决:服务器 A 应该在向服务器 B 发出请求时将自己验证为用户 X。

代表团:

服务器 A 收到来自浏览器的请求,包含 TGS 票证。 服务器 A 具有正确的用户名/密码组合(存储在用户代表服务的 Kerberos 数据库中),因此它可以打开票证并验证此用户 服务器 A 向 KDC 请求委托票证,并附上从用户处收到的票证。 KDC(例如 AD)检查是否可以委派(在 Active Directory 中,代表服务器 A 的用户必须被授予委派权限。在 ADC 上使用命令 ktpass 生成 keytab 文件后,此选项卡变为可见。 AD 还会检查用户帐户是否允许委托其票证 - 默认情况下启用,可以为某些特殊、敏感的用户禁用) KDC 给服务器 A 一个委托的 Kerberos 票证。服务器 A 使用它来登录服务器 B。 服务器 B 收到来自服务器 A 的带有委托票证的请求,表明是用户 X 登录。

Kerberos 委托有时被称为“双跳”:http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx

Active Directory 管理员可能不喜欢让服务 A 有权委托票证(即以用户 X 身份登录域中的任何其他服务)的想法。这就是为什么几年前引入了“约束委派”的原因。它使 AD 管理员可以让服务 A 仅以用户 X 的身份登录到服务器 B。他们可以在代表服务 A 的 activeDirectory 帐户上进行设置。

http://windowsitpro.com/security/how-windows-server-2012-eases-pain-kerberos-constrained-delegation-part-1

【讨论】:

以上是关于不同服务之间的 Kerberos 委托的主要内容,如果未能解决你的问题,请参考以下文章

CDH集成的kerberos迁移实战

CDH集成的kerberos迁移实战

Java 连接 HBase ( kerberized 集群 )

AWS EMR kerberizing 集群 hadoop.security.AccessControlException

配置两个不同kerberos认证中心的集群间的互信

Java-Spring-LDAP-Kerberos