跳到主要内容

3. 将字符串解析回可分辨名称

可分辨名称的字符串表示限于 UTF-8 [RFC3629] 编码的 Unicode [Unicode] 字符。该字符串表示的结构由下列扩展 BNF [RFC4234] 语法规定:

distinguishedName = [ relativeDistinguishedName
*( COMMA relativeDistinguishedName ) ]
relativeDistinguishedName = attributeTypeAndValue
*( PLUS attributeTypeAndValue )
attributeTypeAndValue = attributeType EQUALS attributeValue
attributeType = descr / numericoid
attributeValue = string / hexstring

; 下列字符在待编码的值中出现时必须被转义:ESC、
; <escaped> 之一、前导 SHARP 或 SPACE、尾随 SPACE,以及 NULL。
string = [ ( leadchar / pair ) [ *( stringchar / pair )
( trailchar / pair ) ] ]

leadchar = LUTF1 / UTFMB
LUTF1 = %x01-1F / %x21 / %x24-2A / %x2D-3A /
%x3D / %x3F-5B / %x5D-7F

trailchar = TUTF1 / UTFMB
TUTF1 = %x01-1F / %x21 / %x23-2A / %x2D-3A /
%x3D / %x3F-5B / %x5D-7F

stringchar = SUTF1 / UTFMB
SUTF1 = %x01-21 / %x23-2A / %x2D-3A /
%x3D / %x3F-5B / %x5D-7F

pair = ESC ( ESC / special / hexpair )
special = escaped / SPACE / SHARP / EQUALS
escaped = DQUOTE / PLUS / COMMA / SEMI / LANGLE / RANGLE
hexstring = SHARP 1*hexpair
hexpair = HEX HEX

其中产生式 、、、、、、、、、、、、、 和 在 [RFC4512] 中定义。

每个 ( 或 )指代一个属性值断言 (AVA) 的属性类型。 后跟一个 和一个 。 采用 或 形式。

如果采用 形式,则可以通过按从左到右、非递归的方式替换 中出现的每个 来获得所断言值的 LDAP 字符串表示,替换规则如下:

把 <ESC><ESC> 替换为 <ESC>;
把 <ESC><special> 替换为 <special>;
把 <ESC><hexpair> 替换为该 <hexpair> 所指示的八位组。

如果采用 形式,则可以通过把 的每个 转换为该 所指示的八位组来获得 BER 表示。

一个相对可分辨名称包含一个或多个属性值断言,它们以 分隔。

一个可分辨名称包含零个或多个相对可分辨名称,它们以 分隔。

实现必须 (MUST) 识别下表中列出的 AttributeType 名称字符串(描述符),但可以 (MAY) 识别其他名称字符串。

字符串X.500 AttributeType
CNcommonName (2.5.4.3)
LlocalityName (2.5.4.7)
STstateOrProvinceName (2.5.4.8)
OorganizationName (2.5.4.10)
OUorganizationalUnitName (2.5.4.11)
CcountryName (2.5.4.6)
STREETstreetAddress (2.5.4.9)
DCdomainComponent (0.9.2342.19200300.100.1.25)
UIDuserId (0.9.2342.19200300.100.1.1)

这些属性类型在 [RFC4519] 中描述。

实现可以 (MAY) 识别其他 DN 字符串表示。但是,由于并没有要求必须识别(以及如何识别)其他 DN 字符串表示,实现应当 (SHOULD) 只按照本文档第 2 节的规定生成 DN 字符串。