OpenSSL: Разтоварване на текущите надеждни сертификати и зареждане на нов файл със сертификати

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

След това да кажем, че пакетът се актуализира, вероятно с нови сертификати, както и с премахнати сертификати. Искам OpenSSL по същество да се инициализира повторно, за да използва сертификатите в актуализирания пакет и да спре да използва старите сертификати, които е заредил преди това. Доколкото разбирам, SSL_CTX_load_verify_locations() просто се добавя към съществуващия набор от надеждни сертификати.

Някой знае ли как да накара OpenSSL да разтовари текущия си набор от надеждни сертификати? Искам да избягвам рестартирането на всичко и също така искам да избягвам създаването на нови контекстни екземпляри, ако е възможно.

Благодаря!


person Calvin Lin    schedule 16.02.2012    source източник


Отговори (1)


Забелязах, че искате да избегнете създаването на новия контекст, но изглежда като най-„чистото“ и просто решение, защото „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 обект(и) не препраща към данни, които искате да инициализирате отново. Бих предложил първо да напишете проста тестова програма :)

person sirgeorge    schedule 20.02.2012