Я заметил, что вы хотите избежать создания нового контекста, но он кажется наиболее «чистым» и простым решением, потому что «SSL_CTX_load_verify_locations» загружает все в объект «SSL_CTX», поэтому это НЕ для всей библиотеки , Создание нового контекста и его повторная инициализация с помощью SSL_CTX_load_verify_locations - это кратчайший путь. Если это не вариант, то:
1) SSL_CTX_load_verify_locations (SSL_CTX * ctx, ....) только вызывает 'X509_STORE_load_locations (ctx-> cert_store)', где 'ctx-> cert_store' имеет тип 'X509_STORE *'
2) Я бы посоветовал взглянуть на исходный код функции 'X509_STORE_free' (crypto / x509 / x509_lu.c) - он выполняет именно то, что вам нужно: он выполняет итерацию по всем объектам 'X509_LOOKUP *' в «SSL_CTX» и освобождает их. Также посмотрите на соответствующие 'X509_STORE_load_locations' (crypto / x509 / x509_d2.c), упомянутые выше.
Предупреждение : я не пытался сделать это (или что-то похожее), я не уверен, что объект SSL * (используется для обработки соединений) или какой-либо другой объект (ы) OpenSSL не ссылаясь на данные, которые вы хотите повторно инициализировать. Я бы предложил сначала написать простую тестовую программу:)