RFC 5280在DN中允许哪些字符?

时间:2014-03-13 13:27:37

标签: pki rfc

我在解析RFC 5280的几个极端情况时遇到了一些麻烦(我的ASN.1不太符合规范)。

首先,作为RDN字段的一部分,是否允许使用单独的逗号?逗号很常见,即

CN=Wingdings, Inc

但是名字就像

CN=,有效吗?

其次,RFC是否允许空字段名称,例如CN=

1 个答案:

答案 0 :(得分:2)

RFC说明了这一点(第4.1.2.4节)

   Name ::= CHOICE { -- only one possibility for now --
     rdnSequence  RDNSequence }

   RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

   RelativeDistinguishedName ::=
     SET SIZE (1..MAX) OF AttributeTypeAndValue

   AttributeTypeAndValue ::= SEQUENCE {
     type     AttributeType,
     value    AttributeValue }

   AttributeType ::= OBJECT IDENTIFIER

   AttributeValue ::= ANY -- DEFINED BY AttributeType

然后(附录A)

-- Naming attributes of type X520CommonName

id-at-commonName        AttributeType ::= { id-at 3 }

-- Naming attributes of type X520CommonName:
--   X520CommonName ::= DirectoryName (SIZE (1..ub-common-name))
--
-- Expanded to avoid parameterized type:
X520CommonName ::= CHOICE {
      teletexString     TeletexString   (SIZE (1..ub-common-name)),
      printableString   PrintableString (SIZE (1..ub-common-name)),
      universalString   UniversalString (SIZE (1..ub-common-name)),
      utf8String        UTF8String      (SIZE (1..ub-common-name)),
      bmpString         BMPString       (SIZE (1..ub-common-name)) }

从此我推断:

  1. CN值必须至少包含一个字符。

  2. 几乎任何角色在CN中都有效。

  3. 因此,不允许“CN =”,但允许“CN =”。

    (您是否想要考虑“,”作为可接受的通用名称是一个不同的问题,但至少它不会被语法规则禁止。)

    警告:以上是基于粗略阅读RFC和一些侧面研究作为一个完整性检查。我不是X.500 / 520或ASN.1专家。