5.1. ASN.1 兼容性的具体注意事项
5.1. ASN.1 兼容性的具体注意事项
出于兼容性目的,实现者应注意以下关于 Kerberos 中 ASN.1 使用的具体注意事项。这些注意事项不描述对 ASN.1 标准用法的偏离。这些注意事项的目的是描述各种实现的一些历史怪癖和不合规性,以及历史上的歧义,尽管它们是有效的 ASN.1,但在实现过程中可能导致混淆。
5.1.1. ASN.1 唯一编码规则
Kerberos 协议消息的编码应遵守 [X690] 中描述的 ASN.1 唯一编码规则 (DER)。一些实现(据信主要是源自 DCE 1.1 及更早版本的实现)已知使用更通用的基本编码规则 (BER);特别是,这些实现发送不定长度编码。实现可以接受此类编码以实现向后兼容性,尽管实现者被警告完全通用的 BER 解码充满危险。
5.1.2. 可选整数字段
某些实现无法在内部区分省略的可选整数值和传输的零值。协议中与此相关的位置包括各种微秒字段、随机数和序列号。如果应用程序期望这样,实现应该将省略的可选整数值视为已使用零值传输。
5.1.3. 空的 SEQUENCE OF 类型
协议中有些地方消息包含 SEQUENCE OF 类型作为可选成员。这可能导致包含空 SEQUENCE OF 编码的编码。Kerberos 协议在语义上不区分不存在的可选 SEQUENCE OF 类型和存在但为空的可选 SEQUENCE OF 类型。实现不应该发送标记为 OPTIONAL 的空 SEQUENCE OF 编码,但应该接受它们并将其视为等同于省略的 OPTIONAL 类型。在描述 Kerberos 消息的 ASN.1 语法中,这些有问题的可选 SEQUENCE OF 类型的实例用注释指示。
5.1.4. 无法识别的标记号
该协议的未来修订版可能包括具有不同 APPLICATION 类标记号的新消息类型。此类修订应通过仅将消息类型发送给已知理解它们的各方来保护旧实现;例如,通过接收者在前面的请求中设置的标志位。为了实现健壮的错误处理,实现应该优雅地处理接收到具有无法识别标记的消息,并在适当时返回错误消息。
特别是,如果通过 TCP 传输发送了不正确的标记,KDC 应该返回 KRB_AP_ERR_MSG_TYPE。KDC 不应响应通过 UDP 传输接收到的具有未知标记的消息,以避免拒绝服务攻击。对于非 KDC 应用程序,Kerberos 实现通常向应用程序指示错误,应用程序根据应用程序协议采取适当的步骤。
5.1.5. 大于 30 的标记号
DER ASN.1 解码器的简单实现可能会遇到大于 30 的 ASN.1 标记号的问题,因为此类标记号使用多个字节进行编码。该协议的未来修订版可能利用大于 30 的标记号,实现应该准备好在不识别标记时优雅地返回错误(如果适当)。