Changeset 845c112 in mod_gnutls for src/gnutls_ocsp.c


Ignore:
Timestamp:
Jan 12, 2020, 5:27:45 AM (8 months ago)
Author:
Fiona Klute <fiona.klute@…>
Branches:
master, proxy-ticket
Children:
a3e0f7b
Parents:
587642d
Message:

Async OCSP updates for multi-stapling

There's now one mod_watchdog callback per certificate with stapling
enabled, so they all get updated independently. Adding "server" to the
OCSP data structure is necessary because the async update function
needs access to the virtual host configuration.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_ocsp.c

    r587642d r845c112  
    10091009/**
    10101010 * Perform an asynchronous OCSP cache update. This is a callback for
    1011  * mod_watchdog, so the API is fixed.
     1011 * mod_watchdog, so the API is fixed (except the meaning of data).
    10121012 *
    10131013 * @param state watchdog state (starting/running/stopping)
     
    10261026        return APR_SUCCESS;
    10271027
    1028     server_rec *server = (server_rec *) data;
     1028    mgs_ocsp_data_t ocsp_data = (mgs_ocsp_data_t) data;
     1029    server_rec *server = (server_rec *) ocsp_data->server;
    10291030    mgs_srvconf_rec *sc = (mgs_srvconf_rec *)
    10301031        ap_get_module_config(server->module_config, &gnutls_module);
     
    10401041     * mgs_get_ocsp_response. */
    10411042    apr_global_mutex_lock(sc->ocsp_mutex);
    1042     apr_status_t rv = mgs_cache_ocsp_response(server, sc->ocsp[0], &expiry);
     1043    apr_status_t rv = mgs_cache_ocsp_response(server, ocsp_data, &expiry);
    10431044
    10441045    apr_interval_time_t next_interval;
     
    10921093    sc->singleton_wd->set_callback_interval(sc->singleton_wd->wd,
    10931094                                            next_interval,
    1094                                             server, mgs_async_ocsp_update);
     1095                                            ocsp_data, mgs_async_ocsp_update);
    10951096
    10961097    ap_log_error(APLOG_MARK, rv == APR_SUCCESS ? APLOG_DEBUG : APLOG_WARNING,
     
    11141115
    11151116        apr_status_t rv = mgs_cache_fetch(sc->ocsp_cache, server,
    1116                                           sc->ocsp[0]->fingerprint,
     1117                                          ocsp_data->fingerprint,
    11171118                                          &ocsp_response,
    11181119                                          pool);
     
    11231124                         "Caching OCSP request failure for %s:%d.",
    11241125                         server->server_hostname, server->addrs->host_port);
    1125             mgs_cache_ocsp_failure(server, sc->ocsp[0],
     1126            mgs_cache_ocsp_failure(server, ocsp_data,
    11261127                                   sc->ocsp_failure_timeout * 2);
    11271128        }
     
    11411142{
    11421143    ocsp->cert = sc->certs_x509_crt_chain[idx];
     1144    ocsp->server = server;
    11431145
    11441146    ocsp->uri = mgs_cert_get_ocsp_uri(pconf, ocsp->cert);
     
    12921294        && sc->ocsp_auto_refresh == GNUTLS_ENABLED_TRUE)
    12931295    {
    1294         apr_status_t rv =
    1295             sc->singleton_wd->register_callback(sc->singleton_wd->wd,
    1296                                                 sc->ocsp_cache_time,
    1297                                                 server, mgs_async_ocsp_update);
    1298         if (rv == APR_SUCCESS)
    1299             ap_log_error(APLOG_MARK, APLOG_INFO, rv, server,
    1300                          "Enabled async OCSP update via watchdog "
    1301                          "for %s:%d",
    1302                          server->server_hostname, server->addrs->host_port);
    1303         else
    1304             ap_log_error(APLOG_MARK, APLOG_WARNING, rv, server,
    1305                          "Enabling async OCSP update via watchdog "
    1306                          "for %s:%d failed!",
    1307                          server->server_hostname, server->addrs->host_port);
     1296        /* register an update callback for each certificate configured
     1297         * for stapling */
     1298        for (unsigned int i = 0; i < sc->ocsp_num; i++)
     1299        {
     1300            apr_status_t rv =
     1301                sc->singleton_wd->register_callback(sc->singleton_wd->wd,
     1302                                                    sc->ocsp_cache_time,
     1303                                                    sc->ocsp[i],
     1304                                                    mgs_async_ocsp_update);
     1305            if (rv == APR_SUCCESS)
     1306                ap_log_error(APLOG_MARK, APLOG_INFO, rv, server,
     1307                             "Enabled async OCSP update via watchdog "
     1308                             "for %s:%d, cert[%u]",
     1309                             server->server_hostname, server->addrs->host_port,
     1310                             i);
     1311            else
     1312                ap_log_error(APLOG_MARK, APLOG_WARNING, rv, server,
     1313                             "Enabling async OCSP update via watchdog "
     1314                             "for %s:%d, cert[%u] failed!",
     1315                             server->server_hostname, server->addrs->host_port,
     1316                             i);
     1317        }
    13081318    }
    13091319
Note: See TracChangeset for help on using the changeset viewer.