【问题标题】:How to parse certificate Subject string?如何解析证书主题字符串?
【发布时间】:2019-06-05 16:06:40
【问题描述】:

使用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=美国
S=加利福尼亚
L=圣何塞
O="Adobe 系统
合并"
OU=Digital ID Class 3 - Microsoft 软件验证 v2
OU=Acrobat 工程
CN="Adobe 系统
合并”

是否有任何 API 函数可以解析此主题字符串?

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

【问题讨论】:

  • SplitString() 不考虑带引号的字符串。您是否尝试过 TStringListCommaText 属性?否则,您将只需要编写自己的解析器,或找到第 3 方解析器。这是一种相当简单的手动解析文本格式
  • 据我所知TStringList.CommaText 将空格和逗号都视为分隔符。我一直在考虑手动编写解析器,但决定询问是否有任何标准方式
  • @ZurabD 使用TStringsList.StrictDelimiter 属性来避免CommaText 分隔空格
  • 只是古玩,你是如何使用crypto api的?您使用某些开源库还是第三方集?
  • @NasreddineGalfout 我使用JEDI API Library & Security Code Library 只是为了有API 声明sourceforge.net/projects/jedi-apilib 查看库中的JwaWinCrypt.pas 模块。

标签: delphi cryptoapi


【解决方案1】:

答案如下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多