如何获得链中的下一个证书
How to get next certificate in chain
我想从 Windows 证书存储中获取父证书(或链中的所有证书)(假设我知道结束证书的位置)。我需要获得每一个以构建我自己的自定义 X509_STORE
(使用 OpenSSL)。
我认为正确的做法是:
- 使用
CertFindCertificateInStore
获得第一个证书(完成)
- 使用
CertGetCertificateChain
获取证书链(完成)
- 从链中提取证书 (?)
- 对于链中的每个证书,使用
d2i_X509
转换它(完成)
或
- 使用
CertFindCertificateInStore
获得第一个证书(完成)
- 获取父证书(如果存在)(?)
- 使用
d2i_X509
进行转换,转到 2。(完成)
然后创建商店。
接下来要回答的问题是 - 如何使用 Windows 证书存储获取父证书或链中的所有证书?我可能在这里遗漏了一些或多或少的神秘功能。
由于 CertFindCertificateInStore
输出一个链上下文,可以使用漂亮的结构访问它的成员:
chainContext->rgpChain[0]->rgpElement[iCertIndex]->pCertContext->pbCertEncoded
其中 iCertIndex
介于 0
(end-certificate) 和 chainSize -1
(self-signed 根证书)之间。
我想从 Windows 证书存储中获取父证书(或链中的所有证书)(假设我知道结束证书的位置)。我需要获得每一个以构建我自己的自定义 X509_STORE
(使用 OpenSSL)。
我认为正确的做法是:
- 使用
CertFindCertificateInStore
获得第一个证书(完成) - 使用
CertGetCertificateChain
获取证书链(完成) - 从链中提取证书 (?)
- 对于链中的每个证书,使用
d2i_X509
转换它(完成)
或
- 使用
CertFindCertificateInStore
获得第一个证书(完成) - 获取父证书(如果存在)(?)
- 使用
d2i_X509
进行转换,转到 2。(完成)
然后创建商店。
接下来要回答的问题是 - 如何使用 Windows 证书存储获取父证书或链中的所有证书?我可能在这里遗漏了一些或多或少的神秘功能。
由于 CertFindCertificateInStore
输出一个链上下文,可以使用漂亮的结构访问它的成员:
chainContext->rgpChain[0]->rgpElement[iCertIndex]->pCertContext->pbCertEncoded
其中 iCertIndex
介于 0
(end-certificate) 和 chainSize -1
(self-signed 根证书)之间。