Windows 将 x.509 主题字段中的状态显示为 S=<state>



我注意到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实现支持别名。也就是说,特定对象标识符可能具有到友好名称的多个映射。例如,StateOrProvinceRDN 映射到三个友好名称:

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可以映射到SSTState Or Province。它以相反的方向工作:所有别名都将转换为相同的 OID 值。

从 OID 到友好名称的默认转换取决于 OID 组(请求时(和注册顺序(优先级(。在给定的情况下,S别名的优先级高于ST