如何获得链中的下一个证书

时间:2016-01-28 09:15:24

标签: c openssl cryptoapi wincrypt

我想从Windows证书存储中获取父证书(或链中的所有证书)(假设我知道结束证书的位置)。我需要获取每个人以构建我自己的自定义X509_STORE(使用 OpenSSL )。

我认为正确的行动方针是:

  1. 使用CertFindCertificateInStore(已完成)
  2. 获取第一个证书
  3. 使用CertGetCertificateChain(已完成)
  4. 获取证书链
  5. 从链(?)
  6. 中提取证书
  7. 对于链中的每个证书,使用d2i_X509(已完成)
  8. 进行转换

    1. 使用CertFindCertificateInStore(已完成)
    2. 获取第一个证书
    3. 获取父证书(如果存在)(?)
    4. 使用d2i_X509转换它,转到2.(已完成)
    5. 然后创建商店。

      接下来要回答的问题是 - 如何使用Windows证书存储获取父证书或链中的所有证书?我可能在这里错过了一些或多或少的神秘功能。

1 个答案:

答案 0 :(得分:0)

CertFindCertificateInStore输出链上下文时,可以使用漂亮的结构访问它的成员:

chainContext->rgpChain[0]->rgpElement[iCertIndex]->pCertContext->pbCertEncoded

其中iCertIndex介于0(最终证书)和chainSize -1之间(自签名根证书)。