gpt4 book ai didi

x509 - X.509 标准属性集顺序

转载 作者:行者123 更新时间:2023-12-02 06:08:30 24 4
gpt4 key购买 nike

我正在使用一些遗留代码,它们实现了一个非常基本的 X.509 解析器。该代码相当旧,我无法分发它。

此代码按顺序并按特定顺序读取发行者和主题中的标准属性集。作为一个基本示例:

C=XX, O=MyOrganization, OU=MyOrganizationalUnit,
CN=myCommonName

因此它会读取国家/地区,然后是组织,然后是组织单位,最后是通用名称。

我一直在阅读标准 ( https://www.rfc-editor.org/rfc/rfc5280#section-4.1.2.4 )(请参阅第 4.1.2.4 和 4.1.2.6 节),并且此遗留代码以某种方式适用于大多数证书。

问题是这组属性是否必须遵循特定的顺序以及它是这样说还是相反。

最佳答案

该特定顺序的原因是 X.500 中定义了可分辨名称 (DN)。系列标准。 X.500 是关于目录服务的。 X.500 目录服务器大部分已被 LDAP 服务器取代,但 X.509(该系列中定义证书的部分)仍用于其他目的。

在目录树中,最通用的节点位于顶部(在您的示例中国家),然后缩小树的每个级别。一个人通常是这棵树上的一片叶子:

                 C=US
|
O=Example1 ----- O=Example2
| |
OU=OU1-----OU=OU2 ...
| |
CN=XYZ ...

AFAIK X.500 包含一些规则,定义哪些属性类型可以遵循树中的某个属性类型,但不幸的是,这些文档不是免费提供的。

ASN.1 级别证书的主体或颁发者 DN 中相对专有名称 (RDN) 的顺序反射(reflect)了树中的顺序(即自上而下):

    SEQUENCE {
SET {
SEQUENCE {
OBJECT IDENTIFIER=CountryName (2.5.4.6)
PRINTABLE STRING='US'
}
}
SET {
SEQUENCE {
OBJECT IDENTIFIER=OrganizationName (2.5.4.10)
PRINTABLE STRING='GeoTrust Inc.'
}
}
SET {
SEQUENCE {
OBJECT IDENTIFIER=CommonName (2.5.4.3)
PRINTABLE STRING='GeoTrust Global CA'
}
}
}

但是,对于 DN 的字符串表示,有两个标准:OpenSSL 默认显示实际存储在证书中的属性,而 RFC 2253/4514颠倒顺序:

... the output consists of the string encodings of each RelativeDistinguishedName in the RDNSequence (according to Section 2.2), starting with the last element of the sequence and moving backwards toward the first.

CN=GeoTrust Global CA,O=GeoTrust Inc.,C=US

另请注意,存在“野外”证书,其 DN 中有多个 OU 或 RFC 4519 中不太常见的属性类型。例如序列号或 UID。我还看到过不少证书,其中 RDN 实际上是以错误的顺序进行编码的。

关于x509 - X.509 标准属性集顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com