3

我很难理解 RDN (RelativeDistinguishedName) 中属性 (AttributeTypeAndValue) 的顺序。

以下是相关的 ASN.1 定义(取自www.in2eps.com):

TBSC证书

TBSCertificate ::= SEQUENCE {
    [...]
    subject    Name,
    [...]
}

姓名

Name ::= CHOICE {
    rdnSequence RDNSequence
}

RDNS序列

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

如果我创建一个包含“/CN=CommonNameX/O=OrganizationX/...”的 CSR(按此特定顺序),CA 如何从中构造证书?

将主题设置为“.../O=OrganizationX/CN=CommonNameX/”(倒序相同)时,证书将如何构造?

据我所知,RDN 属性的顺序在验证证书链时很重要。因此,我假设必须有一些详细的规范可用?

更重要的是,我还想知道是否有不同的 CA 使用不同的排序。如果是这样,有人可以指出一些 CA 吗?

编辑:

阅读第一个答案后,我意识到我要求的东西与预期的完全不同。简而言之:预期的问题是,RDN 序列中元素的顺序是否重要。

很抱歉造成混乱,我会在之后更正问题的标题......

4

4 回答 4

6

如果我创建一个包含“/CN=CommonNameX/O=OrganizationX/...”的 CSR(按此特定顺序),CA 如何从中构造证书?

一个体面的 CA 实际上应该忽略 CSR 中提交的 DN,并根据已验证的信息构建主题 DN。也就是说,通常,他们会根据他们的 CA 政策放置他们自己的国家、组织、OU(等等)。他们会将 CN 更改为您申请的主机的 CN(例如,或根据证书类型与申请过程相关的任何其他内容)。CSR 中的内容对于跟踪在申请过程中提交的公钥的身份很有用,但它充其量只能用于管理目的。

据我所知,RDN 属性的顺序在验证证书链时很重要。因此,我假设必须有一些详细的规范可用?

是的,顺序很重要RDNSequence确实是SEQUENCE OF RelativeDistinguishedName. 每个 RDN 本身就是一组(无序的)AVA(属性值断言/ AttributeTypeAndValueSET SIZE (1 .. MAX) OF AttributeTypeAndValue:。

每个 RDN 内容(AVA 集)和每个 DN(RDN 序列)的匹配规则在RFC 5280中定义:

   Two naming attributes match if the attribute types are the same and
   the values of the attributes are an exact match after processing with
   the string preparation algorithm.  Two relative distinguished names
   RDN1 and RDN2 match if they have the same number of naming attributes
   and for each naming attribute in RDN1 there is a matching naming
   attribute in RDN2.  Two distinguished names DN1 and DN2 match if they
   have the same number of RDNs, for each RDN in DN1 there is a matching
   RDN in DN2, and the matching RDNs appear in the same order in both
   DNs.  A distinguished name DN1 is within the subtree defined by the
   distinguished name DN2 if DN1 contains at least as many RDNs as DN2,
   and DN1 and DN2 are a match when trailing RDNs in DN1 are ignored.

本质上,DN 中的 RDN 需要按照正确的顺序(SEQUENCE有序),但 AVA 的顺序不正确(SET无序):“如果两个相对可分辨名称 RDN1 和 RDN2 具有相同数量的命名属性,则它们匹配对于 RDN1 中的每个命名属性,RDN2 中都有一个匹配的命名属性。 "

实际上,大多数 CA 每个 RDN 只使用一个属性值对。如果许多依赖于文本序列化(例如RFC 2253 )的实现(不一定是 SSL/TLS 堆栈的一部分,但说是在其之上的身份验证/授权层)会被多个混淆,我不会感到惊讶AVA(更具体地说,它们的顺序在每个 RDN 中并不重要,因此您可以拥有两个实际上等效的不同文本序列化)。

于 2015-10-12T16:53:34.450 回答
3

(作为@CryptoGuy 回答的附录一些关于 DN 比较的背景)

Internet X.509 公钥基础设施证书的基本 IETF 规范是RFC 5280

比较可分辨名称的规则在第 7.1 节中指定。他们是:

  • 如果两个专有名称 DN1 和 DN2 具有相同数量的 RDN,则它们匹配,对于 DN1 中的每个 RDN,DN2 中都有一个匹配的 RDN,并且匹配的 RDN 在两个 DN 中以相同的顺序出现。
  • 如果两个相对专有名称 RDN1 和 RDN2 具有相同数量的命名属性,并且对于 RDN1 中的每个命名属性,在 RDN2 中都有一个匹配的命名属性,则它们匹配。(注:对命名属性的出现顺序没有要求!)
  • 如果属性类型相同并且属性的值经过字符串准备算法处理后完全匹配,则两个命名属性匹配。

因此,两个 DN 必须被视为相等,即使它们在某些匹配的相对专有名称中的命名属性顺序不同。

不幸的是,在这方面有一些相关的程序失败了。因此,为了安全起见,只需将一个命名属性放入每个 RDN。

关于@CryptoGuy 在他的回答中提到的树结构,它在同一节 7.1 中更正式地定义如下:

  • 如果 DN1 包含的 RDN 至少与 DN2 一样多,并且当 DN1 中的尾随 RDN 被忽略时,DN1 和 DN2 匹配,则专有名称 DN1 位于专有名称 DN2 定义的子树中。
于 2015-10-12T14:34:50.977 回答
1

这是预期的行为。RDN 属性是 X.500 专有名称的一部分,它是一棵树。树是从根节点开始并通过添加嵌套子节点来构建的。例如,一个主题CN=John Wayne, OU=IT Department, DC=contoso, DC=com将按如下方式构建:

  1. 根/顶级节点:com
  2. 根节点/域中的子节点:contoso
  3. 域内组织单位:IT部门
  4. 通用名称、最终实体或委托人:John Wayne

这就是 RDN 以相反顺序放置的原因。为方便起见,证书查看器会反转 RDN 属性排序,首先显示主体名称。

如果我创建一个包含“/CN=CommonNameX/O=OrganizationX/...”的 CSR(按此特定顺序),CA 如何从中构造证书?

CA 不会更改主题名称中的 RDN 属性顺序,因为它们已经在证书请求中颠倒了。您可以在任何 ASN.1 查看器中打开生成的请求文件,以获取二进制请求中 RDN 属性的实际顺序。

更重要的是,我还想知道是否有不同的 CA 使用不同的排序。如果是这样,有人可以指点我一些可用的 CA 吗?

我使用的所有 CA 的行为如上所述(编码 X.500 名称时使用反向排序)。

编辑:可分辨名称的表示在[RFC1779]中定义

编辑2(对RDN序列顺序重要性问题):正如已经说过的,它很重要。当 CA 签署证书时,它应将 RDN 放置在 Issuer 字段中,其顺序与它们在其证书的 Subject 字段中出现的顺序相同。

于 2015-10-12T12:21:15.243 回答
0

除了 DER 编码 (X.690) ASN.1 中的 RDN 排序之外,这个问题的主要答案是准确的。SET OF ASN.1 构造类型的 DER 编码意味着您必须对所有 Attribute-Type-And-Value 项进行排序,比较它们的 DER 编码(较短的 DER 编码在比较时必须填零)。来源:ITU-T X.690 11.6“组件集”。请注意,当今绝大多数 X.509v3 证书确实是 DER 编码的。

于 2019-06-06T20:55:50.303 回答