我在解析RFC 5280的几个极端情况时遇到了一些麻烦(我的ASN.1不太符合规范)。
首先,作为RDN字段的一部分,是否允许使用单独的逗号?逗号很常见,即
CN=Wingdings, Inc
但是名字就像
CN=,
有效吗?
其次,RFC是否允许空字段名称,例如CN=
?
答案 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)) }
从此我推断:
CN值必须至少包含一个字符。
几乎任何角色在CN中都有效。
因此,不允许“CN =”,但允许“CN =”。
(您是否想要考虑“,”作为可接受的通用名称是一个不同的问题,但至少它不会被语法规则禁止。)
警告:以上是基于粗略阅读RFC和一些侧面研究作为一个完整性检查。我不是X.500 / 520或ASN.1专家。