0

我遇到了两种不同的编码多个 OU 的方法。一种是将多个OU与其他标识符列在同一级别,例如

SEQUENCE {
   SET {
     SEQUENCE {
       OBJECT IDENTIFIER commonName (2 5 4 3)
       PrintableString 'tester'
       }
     }
   SET {
     SEQUENCE {
       OBJECT IDENTIFIER organizationalUnitName (2 5 4 11)
       UTF8String 'department1'
       }
     }
   SET {
     SEQUENCE {
       OBJECT IDENTIFIER organizationalUnitName (2 5 4 11)
       UTF8String 'org1'
       }
     }
}

另一种是将OU作为列表嵌入如下

SEQUENCE {
   SET {
     SEQUENCE {
       OBJECT IDENTIFIER commonName (2 5 4 3)
       PrintableString 'tester'
       }
     }
   SET {
     SEQUENCE {
       OBJECT IDENTIFIER organizationalUnitName (2 5 4 11)
       PrintableString 'department1'
       }
     SEQUENCE {
       OBJECT IDENTIFIER organizationalUnitName (2 5 4 11)
       PrintableString 'org1'
       }
     }
}

并且一些工具会将第二个编码解码为仅 1 个 OU,表示如下

organizationalUnitName    = department1 + organizationalUnitName    = org1

我只是想知道哪种方式更好或更常见的方式来编码多个 OU。

4

1 回答 1

0

在第一次编码中(SET 仅嵌套一个 SEQUENCE),RDN 属性在编码时按照它们的确切顺序打印/解码:

OU=org1, OU=department1, CN=tester

在第二个示例中(SET 嵌套多个 SEQUENCE),单个 SET 内的 RDN 属性可以重新排序,并可能导致两条路径:

OU=org1, OU=department1, CN=tester
OU=department1, OU=org1, CN=tester

而且这两条路也不一样。这是因为 SET 是一个无序列表,应用程序可以根据需要/想要自由地订购它们。因此,我建议使用第一种编码,即 SET 内只有一个 SEQUENCE。这保证了 X.500 名称在所有符合要求的实现中产生相同的路径。

ps 我刚刚使用 Microsoft 实现的 X.500 解码器对此进行了测试。它不会在 SET 中重新排序多个 SEQUENCE 并在 RDN 编码时按照确切的顺序解码,即OU=org1, OU=department1, CN=tester

pps 请记住,RDN 应从树根向下编码到叶节点。您的编码相反,可能会导致不需要的字符串。

于 2020-10-14T09:32:04.923 回答