摘要
- RFC 1485 为已经确定的 X.500 Distinguished Name 提供面向人的字符串表达,使 ASN.1 结构能够经由名片、邮件等普通媒介传递。
- “无歧义”约束的是解析方向:合规字符串应还原为一个确定的 DN。分隔符、排版、属性描述符或 OID、引号与备用编码允许同一 DN 拥有多种合法文本。
- 解析成功只证明结构被还原;条目是否存在和新鲜、DN 是否相等、现实主体是谁、是否完成认证授权以及行动结果,都需要后续凭证。
一段十六进制为什么比漂亮名称更重要
RFC 1485 最容易被记住的是人可读的名称,最值得追问的却是它不美观的部分。当某个属性值没有合适的显示形式时,规范允许把 BER 编码写成十六进制。文本坦率地称这种结果很丑,并预计它主要出现在病态案例中。
恰恰是这条退路支撑了“任何 DN 都能表达”的承诺。只覆盖常见姓名、组织与国家的语法,可以做出演示,却无法保证未来属性、私有属性或接收端尚不认识的值不被丢弃。十六进制形式不保证接收者理解内容;它保证当前界面不会因为不理解而擅自改写内容。
RFC 1485 处理的是一个已经知道的 Distinguished Name。它与 RFC 1484 的边界很清楚:后者从人输入的“声称名称”出发,在名录中寻找候选 DN;前者不负责猜测或查询,而是把已知 DN 从 ASN.1 对象变成人可交换的字符串。
这不是同一件事的两个按钮。搜索回答“你可能指哪个条目”,序列化回答“如何把这个结构写进普通媒介”。
标点承担了树的结构
X.500 的 DN 由名录信息树路径上的一串 Relative Distinguished Name 组成。RFC 1485 采用适合人阅读的“小端”展示顺序:更具体的部分在前,更宽的命名上下文随后。属性类型和值之间用 = 相连;逗号或分号分隔不同 RDN;+ 则把多个类型—值断言放进同一个多值 RDN。
这些符号不是样式。把 + 换成逗号,会把同一命名层级中的两个断言改成前后两个层级。删除属性类型也不是 RFC 1485 DN 表达的简写,尽管它与友好名称工作共享过语法背景。
因此,一行字符保存了至少四类结构事实:每个值的属性类型、值本身、哪些断言属于同一 RDN,以及 RDN 的先后次序。接收方不必根据换行或字体猜测树路径。
同时,逗号与分号、单行与多行都可以服务展示。可恢复的结构是共同约束,页面长相不是。
引号划出了数据与语法的边界
普通值看起来简单,真实数据却可能包含逗号、引号、首尾空格或连续空格。如果不做处理,这些字符会与语法标记冲突。RFC 1485 要求在相应情况下使用引号与转义,把“值中出现的字符”和“控制结构的字符”分开。
属性类型也可能超出接收软件的短名称表。此时可以写点分十进制 OID。一个解析器即使不认识友好描述符,也能保留类型身份。结合十六进制 BER 退路,这套表示法选择了一个重要原则:可读性服务常见路径,完整性不能依赖常见路径。
但保存 OID 并不等于获得模式知识,保存 BER 也不等于知道如何展示或比较。协议在未知处保持事实,而没有伪造理解。
从一个字符串到一个结构,不等于从一个结构到唯一字符串
“可以无歧义解析”很容易被误读成“只有一种正确写法”。RFC 1485 的目标是让合规输入指向确定结构,而不是为每个 DN 颁发唯一的文字外观。
规范允许不同分隔符和排版;序列化器掌握的描述符注册表可能不同;类型既可能显示为短名,也可能退回 OID;值可以采用转义文本或编码形式。多个字符串因而可以回到同一个结构。
后续标准把这条边界说得更明确。RFC 1779 取代 RFC 1485,RFC 2253 引入 LDAPv3 的 UTF-8 表达,RFC 4514 又取代 RFC 2253。RFC 4514 明言不定义 DN 的规范字符串,并允许产生可解析结果的其他转换算法;DN 相等应由 distinguishedNameMatch 判断,而不是直接比较原始文本。
这不是把新规范的措辞倒填进旧文档,而是用谱系澄清旧工作的准确边界:解析结果可以确定,书写表面仍可多样。
屏幕、字节、结构和匹配是四张不同收据
截图记录字形,邮件存档可能记录字节,解析器记录有序 RDN,名录匹配器依据模式选择规则。四者相互关联,却不能互相冒充。
RFC 4512 把属性语法、匹配规则、RDN 与 DN 放在 LDAP 信息模型中;RFC 4517 给出相关语法和匹配规则;RFC 4518 处理国际化字符串匹配所需的映射、规范化、禁用字符与双向文本问题。肉眼相似不自动意味着码点相同、结构相同或模式意义下相等。
因此,把历史 DN 全部转小写、随意裁剪空格、用记忆中的描述符替换 OID,或把显示字符串直接当数据库唯一键,都可能制造假合并或假分裂。可靠迁移应保留原始字节、字符集处理、序列化器与解析器版本、描述符注册表、解析结构、模式和匹配规则。
名称只把请求送到名录门口
RFC 1309 描述了 X.500 的分布式底座:DUA、DSA、命名上下文、链式处理、引用与副本共同决定一次名录操作看到什么。RFC 1485 没有重新规定这些机制。解析出的 DN 可以成为查询输入,却不是查询回执。
解析成功不能证明目标条目在所查时间仍然存在,不能证明副本新鲜,也不能证明访问控制没有隐藏关键属性。即便查到条目,DN 所指向的也是名录模型中的条目;它不会自动认证现实中的人、证明服务控制权、授予角色或批准交易。
RFC 1485 的安全章节明确表示没有讨论安全问题。不能从一套保持名称结构的标点规则中推导出机密性、完整性、防冒用或授权能力。
Historic 是标准状态,不是数据清除命令
RFC Editor 的 RFC 1485 页面 如今将其列为 Historic。RFC 3494 参与了把 LDAPv2 技术规范转为历史状态的行动。后继文档改进了字符编码、转义、描述符与相等判断的表述。
标准谱系的更新不会同步删除邮件、配置、日志与备份里的旧字符串,也不证明各实现曾经完全一致。一个现代解析器面对旧资料,可能拒绝、误读,或缺失当年的描述符注册信息。判断遗留事实必须查看实际运行过的代码和留存输入,不能只凭当前标准标签。
最小共同语法之后,决定仍然分散
Heng Lu 关于运行代码优先、未来决定本地化与现实层次的论述,为这份旧规范提供了合适的阅读框架。共同标准只规定足以交换的边界;序列化器选择本地展示,解析器还原结构,名录运营者对当前条目负责,认证系统与应用分别作出后续决定。
一条可信证据链应依次保存:原始结构化 DN、序列化字节、传输处理、解析结果、基于模式的相等判断、名录快照与条目版本、认证、授权和最终结果。把其中一层缩写成“名称证明了一切”,就是让显示文本获得协议从未授予的权力。
RFC 1485 的成就在于让正式名称穿越人类文本仍可恢复。它留下的更深原则是:每穿越一次边界,就应留下属于该边界的收据。
来源
- RFC Editor:RFC 1485
- RFC 1485 — A String Representation of Distinguished Names
- RFC 1484 — User Friendly Naming
- RFC 1309 — Technical Overview of Directory Services Using the X.500 Protocol
- RFC 1779 — A String Representation of Distinguished Names
- RFC 2253 — LDAPv3 UTF-8 String Representation of Distinguished Names
- RFC 3494 — Lightweight Directory Access Protocol version 2 to Historic Status
- RFC 4512 — LDAP Directory Information Models
- RFC 4514 — LDAP String Representation of Distinguished Names
- RFC 4517 — LDAP Syntaxes and Matching Rules
- RFC 4518 — LDAP Internationalized String Preparation
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision and Voluntary Adoption
- Heng Lu — On Reality Layers
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
