Programowo zweryfikuj łańcuch certyfikatów za pomocą OpenSSL API

Jest to bardzo podobne do innych pytań, ale te, które obejrzałem, nie mają odpowiedzi lub nie zadają tego samego pytania. Mam certyfikat CA z podpisem własnym i dwa inne certyfikaty podpisane przy użyciu tego certyfikatu CA. Jestem pewien, że certyfikaty są poprawne, ponieważ działa „openssl weryfikuje”:

$ openssl verify -CAfile ca.pem server.pem
server.pem: OK

(Powyższe pochodzi z pamięci, nie mam ich przed sobą, więc może być nieco wyłączone).

Teraz chcę programowo zweryfikować certyfikaty. Mam poniżej funkcję użyteczności z pseudokodem:

int verify_cert(X509 *cert, X509 *cacert)
{
     int ret;
     X509_STORE *store;
     X509_STORE_CTX *ctx;

     store = X509_STORE_new();
     X590_STORE_add_cert(store, cacert);

     ctx = X509_STORE_CTX_new();
     X509_STORE_CTX_init(ctx, store, cert, NULL);

     ret = X590_verify_cert(ctx);

     /* check for errors and clean up */
}

Mój problem polega na tym, że powyższy kod zawsze zwraca „nie można znaleźć certyfikatu wystawcy”. Co zrobiłem źle? Wierzę, że tworzę nowy sklep, dodając cacert, tworząc nowy kontekst i dodając certyfikat dziecka, który ma być zweryfikowany do kontekstu za pomocą wskaźnika do sklepu, który zawiera CA. Oczywiście robię coś źle, ale nie jestem pewien co.

Jakieś pomysły?

Aktualizacja: Wiem, że mogę zapisać te certyfikaty na dysku i użyć czegoś takiego jak plik X509_LOOKUP_ lub coś podobnego. Szukam rozwiązania, które niepotrzebnie nie dotyka dysku.

questionAnswers(5)

yourAnswerToTheQuestion