Программная проверка цепочки сертификатов с использованием OpenSSL API

Это очень похоже на другие вопросы, но те, которые ямы смотрели нанет ответа или нетЯ задаю тот же вопрос. У меня есть самозаверяющий сертификат CA и два других сертификата, которые подписаны этим сертификатом CA. Я'Я уверен, что сертификаты верны, потому чтоopenssl проверить работает:

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

(Выше по памяти, я неони передо мной, так что это может быть немного не так).

Теперь я хочу проверить сертификаты программно. У меня есть служебная функция с псевдокодом ниже:

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 */
}

Моя проблема в том, что приведенный выше код всегда возвращаетне удалось найти сертификат эмитента, Что я сделал не так? Я полагаю, что я создаю новое хранилище, добавляю cacert, создаю новый контекст и добавляю дочерний сертификат для проверки в контекст с указателем на хранилище, которое содержит CA. Я'Я, очевидно, делаю что-то не так, но яЯ не уверен, что.

Есть идеи?

Обновление: яЯ знаю, что могу сохранить эти сертификаты на диск и использовать что-то вроде X509_LOOKUP_file или что-то подобное. Я'ищу решение, которое нетрогать диск без необходимости.

Ответы на вопрос(5)

Ваш ответ на вопрос