我注意到Windows会将x.509证书使用者显示为S=some-state
,而不是x.520:https://www.rfc-editor.org/rfc/rfc1779 描述的ST=some-state
(表1(。
例如:
$> (Get-AuthenticodeSignature -FilePath C:WindowsSystem32cmd.exe).SignerCertificate.Subject
CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
我还以编程方式解析了相同的证书,并收到了作为输出ST=Washington
,因此底层 DER 显然是正确的,问题出在表示中。
有谁知道MS为什么这样做?我错过的部分标准是否允许?我想知道只是出于好奇。提前谢谢。
X.500 名称的Microsoft实现支持标准化名称。此外,Microsoft实现支持别名。也就是说,特定对象标识符可能具有到友好名称的多个映射。例如,StateOrProvince
RDN 映射到三个友好名称:
2.5.4.8 -- State Or Province (S)
pwszName = S
CRYPT_RDN_ATTR_OID_GROUP_ID (5)
dwLength = 0
2.5.4.8 -- State Or Province (S)
pwszName = ST
CRYPT_RDN_ATTR_OID_GROUP_ID (5)
dwLength = 0
2.5.4.8 -- State Or Province (S)
pwszName = State Or Province
CRYPT_EXT_OR_ATTR_OID_GROUP_ID (6)
dwValue = 0
因此,OID=2.5.4.8
可以映射到S
、ST
或State Or Province
。它以相反的方向工作:所有别名都将转换为相同的 OID 值。
从 OID 到友好名称的默认转换取决于 OID 组(请求时(和注册顺序(优先级(。在给定的情况下,S
别名的优先级高于ST
。