C OpenSSL: Wie erhalte ich X509_STORE_CTX von X509_STORE?

Ich habe einen X509_STORE*-Zeiger, mein Ziel ist es, den zugehörigen X509_STORE_CTX*-Zeiger zu erhalten. Darf ich wissen, wie das geht? Ich kann nicht darauf zugreifen, wo X509_STORE_CTX * initialisiert wird.

Wahrscheinlich ist dies eine einfache Frage, aber ich überprüfe immer wieder die manuelle OpenSSL-API und die zugehörige Header-Datei. Ich finde keine API, die dies tun könnte. Vielen Dank.

🤔 А знаете ли вы, что...
C предоставляет возможность работы с низкоуровневыми аппаратными ресурсами, такими как порты ввода-вывода и регистры устройств.


109
1

Antwort:

Gelöst

Ein einzelnes X509_STORE kann von einer unbegrenzten Anzahl von X509_STORE_CTX verwendet/gemeinsam genutzt werden, aber die meiste Zeit wird es von keinem verwendet/referenziert, sodass eine API, um "seinen ... Zeiger" zu erhalten, keinen Sinn macht und nicht existiert.

Dies spiegelt (überhaupt nicht zufällig) einen ähnlichen, aber umgekehrt benannten Unterschied auf der Ebene des SSL-Moduls (libssl) wider. Ein SSL_CTX-Objekt definiert Sicherheitsparameter, die von einer beliebigen Anzahl von Verbindungen verwendet werden können, die jeweils als SSL-Objekt implementiert sind. Im ursprünglichen Design besitzt das SSL_CTX ein X509_STORE, das den Truststore darstellt – die Gruppe von Roots (oder anderen Ankern, wenn PARTIAL_CHAIN ​​verwendet wird), die verwendet werden, um Peer-Zertifikate zu validieren und möglicherweise „eigene“ Ketten aufzubauen – die Sie mithilfe von ändern können CTX APIs wie SSL_CTX_load_verify_locations oder Sie können den (automatisch erstellten) Store mit SSL_CTX_get_cert_store abrufen und ändern oder Ihren eigenen erstellen und mit SSL_CTX_set_cert_store installieren. Jeder OTOH SSL erstellt dynamisch seinen eigenen X509_STORE_CTX, während ein Zertifikat validiert oder gesendet wird; Zu anderen Zeiten existiert kein X509_STORE_CTX. In 1.0.2 verwendet ein SSL standardmäßig den SSL_CTX Store, aber Sie können mit SSL_set[01]_{verify,chain}_cert_store überschreiben.

Wenn Sie ein X509_STORE_CTX erstellen, identifizieren Sie das X509_STORE, das mit X509_STORE_CTX_init verwendet werden soll. Wenn Sie _free es tun, wird diese Verwendung/Referenz beendet.