[openssl-users] OpenSSL 1.1.0: How to get X509_STORE from X509_LOOKUP?

Stephan Mühlstrasser stm at pdflib.com
Tue Jun 12 09:58:27 UTC 2018


Hi,

I'm migrating from OpenSSL 1.0.2 to OpenSSL 1.1.0. The application 
attaches additional data to X509 certificate data structures via the 
X509_set_ex_data()/X509_get_ex_data() functions.

A tricky detail is that the additional data must be attached when 
OpenSSL loads certificates from PEM files or from directories containing 
certificates with the hashed names. With OpenSSL 1.0.2 this was 
implemented by wrapping the X509_LOOKUP_METHODs returned by 
X509_LOOKUP_file() and X509_LOOKUP_hash_dir() into application-specific 
X509_LOOKUP_METHODs.

Within the context of the application-specific X509_LOOKUP_METHOD 
instances the original methods are called, and when certificates are 
loaded then via a callback X509_set_ex_data() is called on the newly 
loaded certificate. For example for the X509_LOOKUP_file() lookup method 
the "ctrl" function pointer from the X509_LOOKUP_METHOD structure is 
overridden:

int (*ctrl) (X509_LOOKUP *ctx, int cmd, const char *argc, long argl,
                  char **ret);

For this approach it is necessary to retrieve the X509_STORE context 
pointer from a X509_LOOKUP pointer passed to the function called via the 
X509_LOOKUP.ctrl function pointer.

In OpenSSL 1.0.2 this was no problem as the "X509_STORE *store_ctx" 
member of the X509_LOOKUP structure was directly accessible. But in 
OpenSSL 1.1.0 the X509_LOOKUP structure is opaque, and as far as I can 
see there is no API function available that would retrieve the 
X509_STORE pointer from a X509_LOOKUP pointer.

Is this intentional, or was this an omission when making the X509_LOOKUP 
structure opaque in OpenSSL 1.1.0?

Thanks
Stephan


More information about the openssl-users mailing list