2016-01-28 7 views
0

Je veux obtenir le certificat parent (ou tous les certificats en chaîne d'ailleurs) du magasin de certificats Windows (en supposant que je connaisse l'emplacement du certificat de fin). Je dois obtenir chacun afin de construire mon propre personnalisé X509_STORE (en utilisant OpenSSL).Comment obtenir le prochain certificat dans la chaîne

Je pense que le bon déroulement de l'action serait:

  1. obtenir premier certificat à l'aide CertFindCertificateInStore (DONE)
  2. obtenir la chaîne de certificats utilisant CertGetCertificateChain (fait)
  3. extrait les certificats de la chaîne (?)
  4. pour chaque certificat en chaîne, le convertir en utilisant d2i_X509 (fait)

ou

  1. obtenir premier certificat à l'aide CertFindCertificateInStore (fait)
  2. obtenir le certificat parent (si elle existe) (?)
  3. convertir en utilisant d2i_X509, allez à 2. (fait)

Puis créez le magasin.

La question à répondre est alors - comment obtenir le certificat parent ou tous les certificats dans la chaîne en utilisant Windows Certificate Store? Il me manque probablement une fonction plus ou moins occulte ici.

Répondre

0

comme CertFindCertificateInStore sorties un contexte de chaîne, on peut accéder à ses membres en utilisant la belle construction:

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

iCertIndex est entre 0 (fin certificat) et chainSize -1 (racine certificat auto-signé) .