[PATCH 1 of 2] SSL: provided "nginx" appname when loading OpenSSL configs

Sergey Kandaurov pluknet at nginx.com
Wed Aug 2 15:54:45 UTC 2023


> On 25 Jul 2023, at 02:10, Maxim Dounin <mdounin at mdounin.ru> wrote:
> 
> # HG changeset patch
> # User Maxim Dounin <mdounin at mdounin.ru>
> # Date 1687300195 -10800
> #      Wed Jun 21 01:29:55 2023 +0300
> # Node ID b79ef48b91e45dba4bf850be6b2a2cc3b8834f5d
> # Parent  904c99bede1770d92566b56939c5b6ec85f05b55
> SSL: provided "nginx" appname when loading OpenSSL configs.
> 
> Following OpenSSL 0.9.8f, OpenSSL tries to load application-specific
> configuration section first, and then falls back to the "openssl_conf"
> default section if application-specific section is not found, by using
> CONF_modules_load_file(CONF_MFLAGS_DEFAULT_SECTION).  Therefore this
> change is not expected to introduce any compatibility issues with existing
> configurations.  It does, however, makes it easier to configure specific

typo: s/makes/make/

> OpenSSL settings for nginx in system-wide OpenSSL configuration
> (ticket #2449).
> 
> Instead of checking OPENSSL_VERSION_NUMBER when using the OPENSSL_init_ssl()
> interface, the code now tests for OPENSSL_INIT_LOAD_CONFIG to be defined and
> true, and also explicitly excludes LibreSSL.  This ensures that this interface
> is not used with BoringSSL and LibreSSL, which do not provide additional
> library initialization settings, notably the OPENSSL_INIT_set_config_appname()
> call.
> 
> diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
> --- a/src/event/ngx_event_openssl.c
> +++ b/src/event/ngx_event_openssl.c
> @@ -140,13 +140,31 @@ int  ngx_ssl_stapling_index;
> ngx_int_t
> ngx_ssl_init(ngx_log_t *log)
> {
> -#if OPENSSL_VERSION_NUMBER >= 0x10100003L
> -
> -    if (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, NULL) == 0) {
> +#if (OPENSSL_INIT_LOAD_CONFIG && !defined LIBRESSL_VERSION_NUMBER)
> +
> +    OPENSSL_INIT_SETTINGS  *init;
> +
> +    init = OPENSSL_INIT_new();
> +    if (init == NULL) {
> +        ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_INIT_new() failed");
> +        return NGX_ERROR;
> +    }
> +
> +#ifndef OPENSSL_NO_STDIO
> +    if (OPENSSL_INIT_set_config_appname(init, "nginx") == 0) {
> +        ngx_ssl_error(NGX_LOG_ALERT, log, 0,
> +                      "OPENSSL_INIT_set_config_appname() failed");
> +        return NGX_ERROR;
> +    }
> +#endif
> +
> +    if (OPENSSL_init_ssl(OPENSSL_INIT_LOAD_CONFIG, init) == 0) {
>         ngx_ssl_error(NGX_LOG_ALERT, log, 0, "OPENSSL_init_ssl() failed");
>         return NGX_ERROR;
>     }
> 
> +    OPENSSL_INIT_free(init);
> +
>     /*
>      * OPENSSL_init_ssl() may leave errors in the error queue
>      * while returning success
> @@ -156,7 +174,7 @@ ngx_ssl_init(ngx_log_t *log)
> 
> #else
> 
> -    OPENSSL_config(NULL);
> +    OPENSSL_config("nginx");
> 
>     SSL_library_init();
>     SSL_load_error_strings();

Looks good.

-- 
Sergey Kandaurov


More information about the nginx-devel mailing list