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

Windows displays states in x.509 Subject fields as S=<state>

我注意到 Windows 会将 x.509 证书主题显示为 S=some-state 而不是 x.520 所描述的 ST=some-statehttps://www.rfc-editor.org/rfc/rfc1779 ( Table1).

例如:

$>  (Get-AuthenticodeSignature -FilePath C:\Windows\System32\cmd.exe).SignerCertificate.Subject
CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US

我还以编程方式解析了相同的证书,并收到了 ST=Washington 作为输出,因此底层 DER 显然是正确的,问题出在表示中。

有谁知道微软为什么这样做?我错过了标准的一部分吗?我只是出于好奇想知道。提前致谢。

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

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

具有更高的优先级