【问题标题】:Correct Kerberos principal type for a hostbased service为基于主机的服务更正 Kerberos 主体类型
【发布时间】:2012-03-29 20:34:10
【问题描述】:
有several types 的 Kerberos 主体。像michael-o@COMPANY.COM 这样的普通用户主体将是KRB_NT_PRINCIPAL。但是像HTTP/host.company.com@COMPANY.COM 这样的服务呢?有几种可能的类型,例如KRB_NT_SRV_{INST|HST|XHST}。哪个是正确的?
据我了解,INST 仅适用于 TGT。
我认为正确的答案应该是HST。我无法在 Oracle 的 JDK 源代码中找到线索,但这两个矛盾点:1 与 2。
【问题讨论】:
标签:
java
kerberos
principal
gssapi
jgss
【解决方案1】:
RFC 4120 7.5.8 节定义了名称类型。实际上,大多数东西都使用 KRB_NT_SRV_HST。除了在 RFC 和测试代码中,我从未见过 KRB_NT_SRV_XHST。通常,当第二个组件不是主机名时使用 KRB_NT_SRV_INST。示例包括 TGT 或其他复制服务,无论您获得哪个主机都无关紧要。但是,名称类型并不重要。第 6.2 节对此进行了描述:
与域名的情况一样,需要约定以确保
所有人都同意主体名称所暗示的信息。
作为主体名称一部分的名称类型字段表示
名称所暗示的信息种类。名称类型应该是
仅作为解释名称含义的提示。这是
检查等价性时不显着。主要名称
不同之处仅在于名称类型标识相同的主体。名字
type 不会对名称空间进行分区。忽略名称类型,没有
两个名称可以相同(即,至少一个组件,或
领域,必须不同)。定义了以下名称类型:
现代 Kerberos 实现确实对 KRB_NT_SRV_HST 进行了特殊处理。特别是,他们更有可能根据此类主体的第二个组成部分中的主机名生成跨领域推荐。所以如果第一个组件标识一个服务,第二个标识一个主机名,SRV_HST 是最好的。
【解决方案2】:
RFC 1510 对此提供了更好的参考。见http://www.rfc-editor.org/rfc/rfc1510.txt
第 7.2.1 节
“主机上服务器的主要标识符通常是
由两部分组成:(1)服务器所在的KDC领域
已注册,并且 (2) 类型为 NT-SRV-HST 的双组件名称,如果
主机名是 Internet 域名或多组件名称
如果主机的名称是 X.500 等格式,则键入 NT-SRV-XHST
允许斜线 (/) 分隔符。两个或的第一个组件
多组件名称将标识服务和后者
组件将识别主机。没有主机名的地方
区分大小写(例如,使用 Internet 域名)
主机必须小写。对于 telnet 和
以系统权限运行的 Berkeley R 命令,第一个
组件将是字符串“主机”而不是特定于服务的
标识符。
"