OpenSSL: выгрузка текущих доверенных сертификатов и загрузка нового файла сертификата - PullRequest
2 голосов
/ 17 февраля 2012

Допустим, у меня запущен и работает OpenSSL, и я ранее передал файл, который я назову комплектом, который содержит несколько сертификатов с использованием SSL_CTX_load_verify_locations ().

Тогда предположим, что пакет обновляется, возможно, с новыми сертификатами, а также с удаленными сертификатами. Я хочу, чтобы OpenSSL по существу повторно инициализировал использование сертификатов в обновленном пакете и прекратил использовать старые сертификаты, которые он ранее загружал. Насколько я понимаю, SSL_CTX_load_verify_locations () просто добавляет к существующему набору доверенных сертификатов.

Кто-нибудь знает, как заставить OpenSSL выгружать свой текущий набор доверенных сертификатов? Я хочу избежать перезапуска всего, а также, если возможно, избегать создания новых экземпляров контекста.

Спасибо!

1 Ответ

0 голосов
/ 20 февраля 2012

Я заметил, что вы хотите избежать создания нового контекста, но он кажется наиболее «чистым» и простым решением, потому что «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 не ссылаясь на данные, которые вы хотите повторно инициализировать. Я бы предложил сначала написать простую тестовую программу:)

...