Getting SSL* is a little bit tricky and hacky, so you need to be careful as 
libcurl doesn't provide a direct way to get OpenSSL handle
 and discourages from using it directly, especially for SSL_read/SSL_write as 
it may break how libcurl protocol filters work.

But if you really need to go that path and planning to use SSL* only for 
extracting some certificate info,
then here are the steps which you can try:

1. Register SSL context callback function via CURLOPT_SSL_CTX_FUNCTION option 
on the easy handle.
It will give you the ability to get SSL context (SSL_CTX*).

2. Once you have the SSL context, you can register SSL_VERIFY_PEER callback on 
that context:
  Like:
        SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, sslVerifyCallback);

3. In the SSL verify peer callback, you can get the SSL handle like:

static int sslVerifyCallback(int valid_sig, X509_STORE_CTX* ctx) {
     auto ssl = (SSL*)(X509_STORE_CTX_get_ex_data(ctx,
         SSL_get_ex_data_X509_STORE_CTX_idx()));
     ...
     // Extract additional certificate info using OpenSSL API.
     ...
}

This is what I used in the past. 
Again, use it on your own risk, as you will not get any support for that kind 
of things.

Thanks,
Dmitry Karpov

-----Original Message-----
From: curl-library <curl-library-boun...@lists.haxx.se> On Behalf Of Patrick 
Schlangen via curl-library
Sent: Monday, November 4, 2024 12:51 AM
To: libcurl development <curl-library@lists.haxx.se>
Cc: Patrick Schlangen <patr...@schlangen.me>
Subject: [EXTERNAL] Get SSL handle after connection has been established

Hi,

I'd like to extract some information from the OpenSSL SSL* after connection 
establishment. Is there any callback / libcurl option I can use for that? 
Basically, I'd like to provide a callback which is invoked at about the point 
where libcurl also performs the CERTINFO extraction.

Background: I'd like to extract the certificate expiration date, but without 
the overhead of string parsing and all the other values captured by 
CURLOPT_CERTINFO.

Thanks,

Patrick
-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html
-- 
Unsubscribe: https://lists.haxx.se/mailman/listinfo/curl-library
Etiquette:   https://curl.se/mail/etiquette.html

Reply via email to