2012-02-16 7 views
2

Disons que OpenSSL est opérationnel et que j'ai déjà transmis un fichier, que j'appellerai le bundle, qui contient plusieurs certificats utilisant SSL_CTX_load_verify_locations(). Ensuite, supposons que le bundle soit mis à jour, éventuellement avec de nouveaux certs et des certs supprimés. Je veux qu'OpenSSL se ré-initialise essentiellement pour utiliser les certs dans le bundle mis à jour et pour arrêter d'utiliser les anciens certs qu'il avait précédemment chargés. Je crois comprendre que SSL_CTX_load_verify_locations() ne fait qu'ajouter à l'ensemble existant de certificats approuvés.OpenSSL: Déchargement des certificats de confiance actuels et chargement du nouveau fichier de certificat

Est-ce que quelqu'un sait comment avoir OpenSSL décharger son ensemble actuel de certificats de confiance? Je veux éviter de tout redémarrer, et je veux aussi éviter de créer de nouvelles instances de contexte si possible.

Merci!

Répondre

0

J'ai remarqué que vous voulez éviter de créer le nouveau contexte, mais cela semble être la solution la plus simple et la plus simple, car 'SSL_CTX_load_verify_locations' charge tout dans l'objet 'SSL_CTX', donc ce n'est PAS pour l'ensemble bibliothèque. Créer un nouveau contexte et le réinitialiser avec 'SSL_CTX_load_verify_locations' est le chemin le plus court. Si ce n'est pas une option, puis:

1) SSL_CTX_load_verify_locations (SSL_CTX * CTX, ....) uniquement les appels 'X509_STORE_load_locations (ctx-> cert_store)' où 'ctx-> cert_store' est de type « X509_STORE * »

2) Je suggérerais regardant le code source de 'X509_STORE_free' fonction (Crypto/x509/x509_lu.c) - il fait exactement ce que vous voulez: il parcourt tous les 'objets' X509_LOOKUP * en le 'SSL_CTX' et les libère. Regardez également les 'X509_STORE_load_locations' correspondantes (crypto/x509/x509_d2.c) mentionnées ci-dessus.

Attention: Je ne l'ai pas essayé de le faire (ou quoi que ce soit simmilar), je ne suis pas sûr si le SSL * objet (utilisé dans les connexions de manutention) ou un autre objet OpenSSL (s) ne référence pas les données que vous voulez réinitialiser. Je suggère d'écrire un programme de test simple d'abord :)

Questions connexes