如何解析证书主题字符串?

How to parse certificate Subject string?

使用 CertNameToStr 函数您可以获得证书的主题字符串:

C=US, S=California, L=San Jose, O="Adobe Systems, Incorporated", OU=Digital ID Class 3 - Microsoft Software Validation v2, OU=Acrobat Engineering, CN="Adobe Systems, Incorporated"

我的问题是,如何解析它以获得名称-值对数组?

我尝试使用带有 , 字符作为分隔符的 SplitString() 函数:

  StrArr := SplitString(edtSubjectStr.Text, ',');
  for I := Low(StrArr) to High(StrArr) do
    Memo1.Lines.Append(Trim(StrArr[i]));

但结果不尽人意:

C=US
S=California
L=San Jose
O="Adobe Systems
Incorporated"
OU=Digital ID Class 3 - Microsoft Software Validation v2
OU=Acrobat Engineering
CN="Adobe Systems
Incorporated"

是否有任何 API 函数来解析这个主题字符串?

或者也许有一种方法可以将它与其他一些 Delphi 组件一起解析|类|函数?

答案如下:

只需使用 CERT_X500_NAME_STR or CERT_NAME_STR_CRLF_FLAG 作为 CertNameToStr() 函数的 dwStrType 属性 的值,您将得到一个 CRLF 分隔的字符串!