5.3. Tickets
本节描述票证和认证器的格式和加密参数。当票证或认证器包含在协议消息中时,它被视为不透明对象。票证是帮助客户端向服务进行认证的记录。
Ticket 结构
Ticket ::= [APPLICATION 1] SEQUENCE {
tkt-vno [0] INTEGER (5),
realm [1] Realm,
sname [2] PrincipalName,
enc-part [3] EncryptedData -- EncTicketPart
}
字段说明
tkt-vno
此字段指定票证格式的版本号。本文档描述版本号 5。
realm
此字段指定发出票证的领域。它还用于标识服务器主体标识符的领域部分。由于 Kerberos 服务器只能为其领域内的服务器发出票证,因此两者将始终相同。
sname
此字段指定服务器身份的名称部分的所有组件,包括标识服务的特定实例的那些部分。
enc-part
此字段保存 EncTicketPart 序列的加密编码。它使用 Kerberos 和最终服务器共享的密钥 (服务器的密钥) 进行加密,使用的密钥用途值为 2。
票证加密部分 (EncTicketPart)
EncTicketPart ::= [APPLICATION 3] SEQUENCE {
flags [0] TicketFlags,
key [1] EncryptionKey,
crealm [2] Realm,
cname [3] PrincipalName,
transited [4] TransitedEncoding,
authtime [5] KerberosTime,
starttime [6] KerberosTime OPTIONAL,
endtime [7] KerberosTime,
renew-till [8] KerberosTime OPTIONAL,
caddr [9] HostAddresses OPTIONAL,
authorization-data [10] AuthorizationData OPTIONAL
}
-- 编码的 Transited 字段
TransitedEncoding ::= SEQUENCE {
tr-type [0] Int32 -- must be registered --,
contents [1] OCTET STRING
}
TicketFlags ::= KerberosFlags
-- reserved(0),
-- forwardable(1),
-- forwarded(2),
-- proxiable(3),
-- proxy(4),
-- may-postdate(5),
-- postdated(6),
-- invalid(7),
-- renewable(8),
-- initial(9),
-- pre-authent(10),
-- hw-authent(11),
-- 以下是自 1510 以来的新标志
-- transited-policy-checked(12),
-- ok-as-delegate(13)
票证标志 (TicketFlags)
此字段指示发出票证时使用或请求了哪些各种选项。标志的含义如下:
| 位 | 名称 | 描述 |
|---|---|---|
| 0 | reserved | 保留供将来扩展此字段 |
| 1 | forwardable | FORWARDABLE 标志通常仅由 TGS 解释,可以被最终服务器忽略。设置时,此标志告诉票证授予服务器可以根据所提供的票证发出具有不同网络地址的新 TGT |
| 2 | forwarded | 设置时,此标志表示票证已被转发或是基于涉及转发 TGT 的认证发出的 |
| 3 | proxiable | PROXIABLE 标志通常仅由 TGS 解释,可以被最终服务器忽略。PROXIABLE 标志的解释与 FORWARDABLE 标志相同,只是 PROXIABLE 标志告诉票证授予服务器只能发出具有不同网络地址的非 TGT |
| 4 | proxy | 设置时,此标志表示票证是代理 |
| 5 | may-postdate | MAY-POSTDATE 标志通常仅由 TGS 解释,可以被最终服务器忽略。此标志告诉票证授予服务器可以基于此 TGT 发出后期票证 |
| 6 | postdated | 此标志表示此票证已被后期。最终服务可以检查 authtime 字段以查看原始认证何时发生 |
| 7 | invalid | 此标志表示票证无效,必须在使用前由 KDC 验证。应用服务器必须拒绝设置了此标志的票证 |
| 8 | renewable | RENEWABLE 标志通常仅由 TGS 解释,通常可以被最终服务器忽略 (某些特别谨慎的服务器可能不允许可续订票证)。可续订票证可用于获取在稍后日期到期的替换票证 |
| 9 | initial | 此标志表示此票证是使用 AS 协议发出的,而不是基于 TGT 发出的 |
| 10 | pre-authent | 此标志表示在初始认证期间,客户端在发出票证之前已由 KDC 认证。预认证方法的强度未指示,但对 KDC 来说是可接受的 |
| 11 | hw-authent | 此标志表示用于初始认证的协议需要使用预期仅由指定客户端拥有的硬件。硬件认证方法由 KDC 选择,方法的强度未指示 |
| 12 | transited-policy-checked | 此标志表示领域的 KDC 已根据领域定义的受信任认证者策略检查了 transited 字段。如果此标志重置 (0),则应用服务器必须自己检查 transited 字段,如果无法执行此操作,则必须拒绝认证。如果标志设置 (1),则应用服务器可以跳过其自己对 transited 字段的验证,依赖于 KDC 执行的验证。应用服务器可以选择仍然根据单独的接受策略应用其自己的验证。此标志是自 RFC 1510 以来的新标志 |
| 13 | ok-as-delegate | 此标志表示票证中指定的服务器 (不是客户端) 已由领域策略确定为委派的合适接收者。客户端可以使用此标志的存在来帮助其决定是否将凭据 (授予代理或转发的 TGT) 委派给此服务器。客户端可以自由忽略此标志的值。设置此标志时,管理员应考虑服务将在其上运行的服务器的安全性和位置,以及服务是否需要使用委派凭据。此标志是自 RFC 1510 以来的新标志 |
| 14-31 | reserved | 保留供将来使用 |
其他字段
key
此字段存在于票证和 KDC 响应中,用于将会话密钥从 Kerberos 传递到应用服务器和客户端。
crealm
此字段包含客户端注册所在的领域的名称以及初始认证发生的位置。
cname
此字段包含客户端主体标识符的名称部分。
transited
此字段列出了参与对向其发出此票证的用户进行认证的 Kerberos 领域的名称。它不指定领域被遍历的顺序。有关此字段如何编码遍历领域的详细信息,请参见第 3.3.3.2 节。当 CA 的名称要嵌入到 transited 字段中时 (如针对协议的某些扩展所指定的那样),CA 的 X.500 名称应该使用 RFC 2253 定义的映射映射到 transited 字段中的项目。
authtime
此字段指示指定主体的初始认证时间。它是此票证所基于的原始票证的发出时间。它包含在票证中以向最终服务提供额外信息,并提供在 KDC 实施 "热列表" 服务所需的必要信息。特别偏执的最终服务可能会拒绝接受初始认证发生在 "太久以前" 的票证。此字段也作为 KDC 响应的一部分返回。当它作为对初始认证 (KRB_AS_REP) 的响应的一部分返回时,这是 Kerberos 服务器上的当前时间。不建议使用此时间值来调整工作站的时钟,因为工作站无法可靠地确定这样的 KRB_AS_REP 实际上是及时来自正确的 KDC。
starttime
票证中的此字段指定票证有效的时间。与 endtime 一起,此字段指定票证的生命周期。如果票证中缺少 starttime 字段,则应使用 authtime 字段来代替它来确定票证的生命周期。
endtime
此字段包含票证不再被接受的时间 (其到期时间)。请注意,各个服务可能对票证的生命周期设置自己的限制,并可能拒绝尚未到期的票证。因此,这实际上是票证到期时间的上限。
renew-till
此字段仅存在于 flags 字段中设置了 RENEWABLE 标志的票证中。它指示续订中可能包含的最大 endtime。它可以被认为是票证的绝对到期时间,包括所有续订。
caddr
票证中的此字段包含零个 (如果省略) 或更多 (如果存在) 主机地址。这些是可以使用票证的地址。如果没有地址,则可以从任何位置使用票证。KDC 发出或最终服务器接受无地址票证的决定是一个策略决定,留给 Kerberos 和最终服务管理员; 他们可能拒绝发出或接受此类票证。由于网络地址转换的广泛部署,建议策略允许发出和接受此类票证。
票证中包含网络地址是为了使攻击者更难使用被盗的凭据。因为会话密钥不会以明文形式通过网络发送,所以仅通过监听网络无法窃取凭据; 攻击者必须获得对会话密钥的访问权限 (可能是通过操作系统安全漏洞或粗心用户的无人值守会话) 才能使用被盗的票证。
请注意,无法可靠地确定接收连接的网络地址。即使可以,已经破坏客户端工作站的攻击者也可以从那里使用凭据。包含网络地址只会使攻击者更难 (而不是不可能) 窃取凭据然后从 "安全" 位置使用它们。
authorization-data
authorization-data 字段用于将授权数据从向其发出票证的主体传递到应用服务。如果不包含授权数据,则此字段将被省略。经验表明,此字段的名称令人困惑,更好的名称是 "限制"。不幸的是,目前不可能更改名称。
此字段包含对基于使用票证的认证获得的任何权限的限制。拥有凭据的任何主体都可以向 authorization data 字段添加条目,因为这些条目进一步限制了可以使用票证执行的操作。可以通过在 TGS 交换期间获得新票证时指定其他条目来进行此类添加,或者可以在使用认证器的 authorization data 字段的链式委派期间添加它们。
因为条目可以由凭据持有者添加到此字段,除非条目通过封装在 KDC 发出的元素中进行单独认证,否则不允许票证的 authorization data 字段中存在条目来扩大使用票证将获得的特权。
此字段中的数据可能特定于最终服务; 该字段将包含服务特定对象的名称以及对这些对象的权限。此字段的格式在第 5.2.6 节中描述。尽管 Kerberos 不关心子字段内容的格式,但它确实携带类型信息 (ad-type)。
通过使用 authorization_data 字段,主体能够发出对特定目的有效的代理。例如,希望打印文件的客户端可以获得要传递给打印服务器的文件服务器代理。通过在 authorization_data 字段中指定文件的名称,文件服务器知道打印服务器在访问要打印的特定文件时只能使用客户端的权限。
可以使用 authorization-data 字段构建提供授权或认证组成员资格的单独服务。在这种情况下,授予授权的实体 (不是授权实体) 可以以其自己的名称获得票证 (例如,票证以特权服务器的名称发出),并且此实体对其自己的权限添加限制并通过代理将受限权限委派给客户端。然后,客户端将此授权凭据与认证交换分开呈现给应用服务器。或者,当使用 KDC 发出的授权数据元素 (参见 5.2.6.2) 单独认证授权时,可以将此类授权凭据嵌入到认证授权实体的票证中。
类似地,如果指定代理的 authorization-data 字段并将主机地址留空,则可以将生成的票证和会话密钥视为能力。有关此字段的一些建议用途,请参见 [Neu93]。
authorization-data 字段是可选的,不必包含在票证中。