Программная проверка цепочки сертификатов с использованием 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 или что-то подобное. Я'ищу решение, которое нетрогать диск без необходимости.