Как получить следующий сертификат в цепочке

Я хочу получить родительский сертификат (или все сертификаты в цепочке, если на то пошло) из хранилища сертификатов Windows (при условии, что я знаю расположение конечного сертификата). Мне нужно получить каждый из них, чтобы создать собственный X509_STORE (используя OpenSSL).

Я думаю, что правильный порядок действий будет следующим:

  1. получить первый сертификат с помощью CertFindCertificateInStore (сделано)
  2. получить цепочку сертификатов с помощью CertGetCertificateChain (сделано)
  3. извлечь сертификаты из цепочки (?)
  4. для каждого сертификата в цепочке преобразовать его с помощью d2i_X509 (сделано)

or

  1. получить первый сертификат с помощью CertFindCertificateInStore (сделано)
  2. получить родительский сертификат (если существует) (?)
  3. преобразовать его с помощью d2i_X509, перейти к 2. (сделано)

Затем создайте магазин.

Тогда возникает вопрос: как получить родительский сертификат или все сертификаты в цепочке с помощью хранилища сертификатов Windows? Я, вероятно, упускаю здесь какую-то более или менее оккультную функцию.


person Leśny Rumcajs    schedule 28.01.2016    source источник


Ответы (1)


поскольку CertFindCertificateInStore выводит контекст цепочки, можно получить доступ к его членам, используя красивую конструкцию:

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

где iCertIndex находится между 0 (конечный сертификат) и chainSize -1 (самозаверяющий корневой сертификат).

person Leśny Rumcajs    schedule 28.01.2016