多个组织单位 (OU) ASN.1 编码差异
Multiple Organizational Units (OU) ASN.1 encoding differences
我遇到过两种不同的编码多个 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 进行编码更好或更常见。
在第一个编码中(SET 仅嵌套一个 SEQUENCE),RDN 属性 printed/decoded 与编码时的顺序完全相同:
OU=org1, OU=department1, CN=tester
在第二个示例中(SET 嵌套多个 SEQUENCE),单个 SET 中的 RDN 属性可以重新排序,并可能导致两条路径:
OU=org1, OU=department1, CN=tester
OU=department1, OU=org1, CN=tester
而且这两条路径不一样。这是因为 SET 是一个无序列表,应用程序可以按它们 need/want 的顺序自由排序。因此,我建议使用第一种编码,即 SET 中只有一个 SEQUENCE。这保证 X.500 名称在所有符合规范的实现中产生相同的路径。
p.s。我刚刚使用 Microsoft X.500 解码器实现对此进行了测试。它不会 re-ordrer SET 内的多个 SEQUENCE,并且会按照 RDN 编码的确切顺序进行解码,即 OU=org1, OU=department1, CN=tester
p.p.s。请记住,RDN 应从树根向下编码到叶节点。您的编码是相反的,可能会导致不需要的字符串。
我遇到过两种不同的编码多个 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 进行编码更好或更常见。
在第一个编码中(SET 仅嵌套一个 SEQUENCE),RDN 属性 printed/decoded 与编码时的顺序完全相同:
OU=org1, OU=department1, CN=tester
在第二个示例中(SET 嵌套多个 SEQUENCE),单个 SET 中的 RDN 属性可以重新排序,并可能导致两条路径:
OU=org1, OU=department1, CN=tester
OU=department1, OU=org1, CN=tester
而且这两条路径不一样。这是因为 SET 是一个无序列表,应用程序可以按它们 need/want 的顺序自由排序。因此,我建议使用第一种编码,即 SET 中只有一个 SEQUENCE。这保证 X.500 名称在所有符合规范的实现中产生相同的路径。
p.s。我刚刚使用 Microsoft X.500 解码器实现对此进行了测试。它不会 re-ordrer SET 内的多个 SEQUENCE,并且会按照 RDN 编码的确切顺序进行解码,即 OU=org1, OU=department1, CN=tester
p.p.s。请记住,RDN 应从树根向下编码到叶节点。您的编码是相反的,可能会导致不需要的字符串。