SSL#

Proporciona el soporte necesario para HTTPS.

Cuando se compila desde el código fuente, este módulo no se compila por defecto; debe habilitarse con la opción de compilación --with-http_ssl_module.

En paquetes e imágenes de nuestros repositorios, el módulo está incluido en la compilación.

Nota

Este módulo requiere la biblioteca OpenSSL.

Ejemplo de configuración#

Para reducir la carga del procesador, se recomienda:

Por ejemplo:

worker_processes auto;

http {

    # ...

    server {
        listen              443 ssl;
        keepalive_timeout   70;

        ssl_protocols       TLSv1.2 TLSv1.3;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /usr/local/angie/conf/cert.pem;
        ssl_certificate_key /usr/local/angie/conf/cert.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        # ...
    }

Directivas#

ssl_buffer_size#

Sintaxis

ssl_buffer_size tamaño;

Predeterminado

ssl_buffer_size 16k;

Contexto

http, server

Establece el tamaño del búfer utilizado para enviar datos.

Por defecto, el tamaño del búfer es de 16k, lo que corresponde a una sobrecarga mínima al enviar respuestas grandes. Para minimizar el Time To First Byte puede ser beneficioso usar valores más pequeños, por ejemplo:

ssl_buffer_size 4k;

ssl_certificate#

Sintaxis

ssl_certificate archivo | data:certificado;

Predeterminado

—

Contexto

http, server

Especifica el certificado en formato PEM para el servidor virtual dado. Los certificados intermedios, si los hay, siguen al certificado primario en el mismo archivo o valor; también puede colocarse allí una clave secreta en formato PEM.

El valor es la ruta al archivo del certificado; una ruta relativa se resuelve respecto al directorio del archivo de configuración principal. Un valor que empieza por data: contiene el propio texto PEM del certificado, de modo que no hace falta ningún archivo. Escriba dicho valor entre comillas, ya que el texto PEM contiene espacios. Para mantenerlo en una sola línea dentro de una configuración con sangría, escriba cada salto de línea como \n:

ssl_certificate 'data:-----BEGIN CERTIFICATE-----\nMIIBszCCAVmgAwIBAgIU...\n-----END CERTIFICATE-----\n';

Un salto de línea literal también funciona, pero entonces cada línea siguiente del texto PEM debe empezar en la primera columna; con líneas con sangría, el certificado no se carga:

ssl_certificate     'data:-----BEGIN CERTIFICATE-----
MIIBszCCAVmgAwIBAgIU...
-----END CERTIFICATE-----';
ssl_certificate_key /etc/angie/ssl/example.com.key;

Esta directiva puede especificarse varias veces para cargar certificados de diferentes tipos, por ejemplo, RSA y ECDSA:

server {
    listen              443 ssl;
    server_name         example.com;

    ssl_certificate     example.com.rsa.crt;
    ssl_certificate_key example.com.rsa.key;

    ssl_certificate     example.com.ecdsa.crt;
    ssl_certificate_key example.com.ecdsa.key;

    # ...
}

El valor puede contener variables, en su totalidad o en parte. Si algún valor de ssl_certificate o de ssl_certificate_key de un servidor virtual contiene variables, Angie carga todos los certificados y claves de este servidor en cada handshake SSL, en lugar de hacerlo al leer la configuración. El valor evaluado se interpreta como se describió antes: texto PEM si empieza por data:, y una ruta de archivo en caso contrario:

ssl_certificate     $ssl_server_name.crt;
ssl_certificate_key $ssl_server_name.key;

El handshake precede a la solicitud, por lo que solo tienen valor las variables ya conocidas en ese momento: por ejemplo, $ssl_server_name, $remote_addr, $server_addr y las variables que map deriva de ellas. Una variable asignada con set sigue vacía durante el handshake, y un valor vacío hace que el handshake falle. La variable $acme_cert_<name> del módulo ACME es un ejemplo de variable cuyo valor es un valor data: ya listo.

Cargar los certificados en cada handshake consume tiempo de CPU; la directiva ssl_certificate_cache conserva los certificados y claves cargados para reutilizarlos. Los certificados cargados durante el handshake no se grapan (stapling) ni se comprimen: ssl_stapling y ssl_certificate_compression no tienen efecto sobre ellos.

Nota

Debe tenerse en cuenta que debido a las limitaciones del protocolo HTTPS para máxima interoperabilidad, los servidores virtuales deben escuchar en diferentes direcciones IP.

Si ssl_ntls está habilitado, la directiva puede aceptar dos argumentos (las partes de firma y cifrado del certificado) en lugar de uno:

listen ... ssl;

ssl_ntls  on;

# certificado NTLS dual
ssl_certificate      sign.crt enc.crt;
ssl_certificate_key  sign.key enc.key;

# puede usarse junto con un certificado RSA regular
ssl_certificate  rsa.crt;
ssl_certificate_key rsa.key;

ssl_certificate_cache#

Sintaxis

ssl_certificate_cache off;

ssl_certificate_cache max=N [inactive=tiempo] [valid=tiempo];

Predeterminado

ssl_certificate_cache off;

Contexto

http, server

Define una caché que almacena certificados SSL y claves secretas especificadas mediante variables.

La directiva admite los siguientes parámetros:

  • max — establece el número máximo de elementos en la caché. Cuando la caché se desborda, se eliminan los elementos menos utilizados recientemente (LRU).

  • inactive — define el tiempo después del cual se elimina un elemento si no ha sido accedido durante ese tiempo, incluso si todavía está dentro de su período valid; cada acceso reinicia este temporizador. El valor predeterminado es 10 segundos.

  • valid — define el tiempo durante el cual un elemento en caché se reutiliza sin comprobaciones. El valor predeterminado es 60 segundos. Pasado este período, un elemento cargado desde un archivo se recarga solo si el archivo ha cambiado, y una clave cargada con el prefijo engine: o store: se vuelve a cargar; un elemento especificado con el prefijo data: sigue siendo válido.

  • off — desactiva la caché.

Las claves protegidas por una frase de contraseña (véase ssl_password_file) no se almacenan en caché.

Ejemplo:

ssl_certificate       $ssl_server_name.crt;
ssl_certificate_key   $ssl_server_name.key;
ssl_certificate_cache max=1000 inactive=20s valid=1m;

ssl_certificate_compression#

Sintaxis

ssl_certificate_compression on | off;

Predeterminado

ssl_certificate_compression off;

Contexto

http, server

Habilita la compresión TLS 1.3 de certificados de servidor.

Nota

La directiva es compatible cuando se utiliza OpenSSL 3.2 o superior; la lista de algoritmos de compresión compatibles es proporcionada por la biblioteca.

Nota

La directiva es compatible cuando se utiliza BoringSSL; la lista de algoritmos de compresión compatibles incluye zlib.

La directiva es incompatible con ssl_stapling: una configuración que habilita ambas en el mismo servidor no se carga.

ssl_certificate_key#

Sintaxis

ssl_certificate_key archivo | data:clave | engine:nombre:id | store:uri;

Predeterminado

—

Contexto

http, server

Especifica la clave secreta en formato PEM para el servidor virtual dado.

Una ruta de archivo y un valor data: se interpretan como en ssl_certificate. Hay dos prefijos más, disponibles solo para claves:

  • engine:nombre:id: la clave con el identificador id del motor OpenSSL nombre;

  • store:uri: la clave que la API STORE de OpenSSL encuentra en uri, por ejemplo, una clave en un token direccionado mediante un URI PKCS #11, como 'store:pkcs11:token=hsm;object=server'; escriba dicho valor entre comillas por el carácter ;.

El valor puede contener variables; en ese caso Angie carga la clave en cada handshake SSL, junto con el certificado, como se describe en ssl_certificate. Una clave protegida por una frase de contraseña se descifra con las frases de contraseña de ssl_password_file, tanto si se carga con la configuración como durante el handshake.

El valor puede llegar íntegro al registro de errores: el mensaje de error sobre una clave que no se carga reproduce el valor, y con variables, el registro de nivel debug anota cada valor evaluado de certificado y clave en cada handshake. Con el prefijo data:, el registro recibe así la propia clave secreta.

Si ssl_ntls está habilitado, la directiva puede aceptar dos argumentos (las partes de firma y cifrado de la clave) en lugar de uno:

listen ... ssl;

ssl_ntls  on;

# certificado NTLS dual
ssl_certificate      sign.crt enc.crt;
ssl_certificate_key  sign.key enc.key;

# puede usarse junto con un certificado RSA regular
ssl_certificate  rsa.crt;
ssl_certificate_key rsa.key;

ssl_ciphers#

Sintaxis

ssl_ciphers cifrados;

Predeterminado

ssl_ciphers HIGH:!aNULL:!MD5;

Contexto

http, server

Especifica los cifrados habilitados. Los cifrados se especifican en el formato entendido por la biblioteca OpenSSL, por ejemplo:

ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

La lista de cifrados depende de la versión de OpenSSL instalada. La lista completa se puede ver usando el comando openssl ciphers.

Advertencia

Con OpenSSL, la directiva ssl_ciphers no configura los cifrados de TLS 1.3; en su lugar, configúrelos con el comando Ciphersuites de la directiva ssl_conf_command. La directiva ssl_ciphers ignora los nombres de cifrados TLS 1.3 de su valor, por lo que dichos nombres no restringen las conexiones TLS 1.3. Si el valor consta únicamente de tales nombres, por ejemplo TLS_AES_128_GCM_SHA256, la configuración no se carga y se produce el error no cipher match.

  • En LibreSSL, los cifrados TLS 1.3 pueden configurarse usando ssl_ciphers.

  • En BoringSSL, los cifrados TLS 1.3 no pueden configurarse en absoluto.

ssl_client_certificate#

Sintaxis

ssl_client_certificate archivo;

Predeterminado

—

Contexto

http, server

Especifica un archivo con certificados de CA de confianza en formato PEM utilizados para verificar certificados de cliente y respuestas OCSP si ssl_stapling está habilitado.

La lista de certificados se enviará a los clientes. Si esto no es deseable, se puede usar la directiva ssl_trusted_certificate.

ssl_conf_command#

Sintaxis

ssl_conf_command nombre valor;

Predeterminado

—

Contexto

http, server

Establece comandos de configuración OpenSSL arbitrarios.

Nota

La directiva es compatible cuando se utiliza OpenSSL 1.0.2 o superior. El comando Ciphersuites, que configura los cifrados de TLS 1.3, requiere OpenSSL 1.1.1 o superior.

Se pueden especificar varias directivas ssl_conf_command en el mismo nivel:

ssl_conf_command Options PrioritizeChaCha;
ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;

Estas directivas se heredan del nivel de configuración anterior si y solo si no hay directivas ssl_conf_command definidas en el nivel actual.

Advertencia

Configurar OpenSSL directamente podría resultar en un comportamiento inesperado.

ssl_crl#

Sintaxis

ssl_crl file;

Predeterminado

—

Contexto

http, server

Especifica un archivo con certificados revocados (CRL) en formato PEM utilizado para verificar certificados de cliente.

ssl_dhparam#

Sintaxis

ssl_dhparam file;

Predeterminado

—

Contexto

http, server

Especifica un archivo con parámetros DH para cifrados DHE.

Advertencia

Por defecto no se establecen parámetros, y por lo tanto los cifrados DHE no se utilizarán.

ssl_early_data#

Sintaxis

ssl_early_data on | off;

Predeterminado

ssl_early_data off;

Contexto

http, server

Habilita o deshabilita TLS 1.3 early data.

Las solicitudes enviadas dentro de early data están sujetas a ataques de reproducción. Para proteger contra tales ataques a nivel de la aplicación, se debe utilizar la variable $ssl_early_data.

proxy_set_header Early-Data $ssl_early_data;

Nota

La directiva es compatible cuando se utiliza OpenSSL 1.1.1 o superior o BoringSSL.

ssl_ecdh_curve#

Sintaxis

ssl_ecdh_curve curve;

Predeterminado

ssl_ecdh_curve auto;

Contexto

http, server

Especifica una curva para cifrados ECDHE.

Nota

Cuando se utiliza OpenSSL 1.0.2 o superior, es posible especificar múltiples curvas, por ejemplo:

ssl_ecdh_curve prime256v1:secp384r1;

El valor especial auto corresponde a la lista de curvas integradas en la biblioteca OpenSSL para OpenSSL 1.0.2 o superior, o prime256v1 para versiones anteriores.

Nota

Cuando se utiliza OpenSSL 1.0.2 o superior, esta directiva establece la lista de curvas soportadas por el servidor. Por lo tanto, para que los certificados ECDSA funcionen, es importante incluir las curvas utilizadas en los certificados.

ssl_encrypted_hello_key#

Added in version 1.11.0.

Sintaxis

ssl_encrypted_hello_key file;

Predeterminado

—

Contexto

http, server

Especifica un archivo con una clave secreta y una configuración para la extensión TLS Encrypted Client Hello (ECH), que oculta el nombre del servidor solicitado por el cliente frente a los observadores de la red. La variable $ssl_encrypted_hello indica si la extensión se utilizó en un protocolo de enlace.

La directiva puede especificarse varias veces, lo que permite rotar las claves: todas las claves se usan para el descifrado, pero solo la configuración de la primera clave se ofrece a los clientes para los reintentos.

ssl_encrypted_hello_key current.ech;
ssl_encrypted_hello_key previous.ech;

El archivo contiene una clave secreta seguida de una ECHConfigList, ambas en formato PEM. Con la rama de la característica ECH de OpenSSL, dicho archivo se crea con:

$ openssl ech -public_name public.example.com -out example.ech

Con BoringSSL, bssl generate-ech escribe la clave y la ECHConfigList en archivos binarios separados, y ninguno de los dos es utilizable tal cual. Ambos deben combinarse en un único archivo PEM: la clave en bruto debe envolverse en una estructura PKCS#8 y codificarse en base64 dentro de un bloque PRIVATE KEY, seguido de la ECHConfigList, y no un ECHConfig suelto, codificada en base64 dentro de un bloque ECHCONFIG. Las compilaciones con BoringSSL solo admiten claves X25519. El formato en sí no depende de la biblioteca TLS, por lo que un archivo generado con el comando anterior también es válido para una compilación con BoringSSL.

Angie descifra el ClientHello antes de conocer el nombre del servidor solicitado a través de SNI, por lo que las claves deben especificarse para el servidor predeterminado.

Nota

El soporte de ECH proviene de la biblioteca TLS, por lo que Angie debe enlazarse con una que lo proporcione: la rama de la característica ECH de OpenSSL, que se configura así:

$ ./configure --with-openssl=../openssl-ech

o BoringSSL, que se configura de otra manera. De lo contrario, la directiva se ignora con una advertencia en el registro de errores.

ssl_keylog_file#

Added in version 1.12.0.

Sintaxis

ssl_keylog_file file;

Predeterminado

—

Contexto

http, server

Especifica un archivo en el que registrar las claves SSL/TLS de las conexiones gestionadas por el contexto, con el formato SSLKEYLOGFILE que utilizan herramientas como Wireshark para descifrar el tráfico TLS capturado.

La directiva no debe usarse con LibreSSL.

Advertencia

El archivo contiene material de claves TLS sensible que puede descifrar el tráfico capturado de las conexiones correspondientes. Utilice esta directiva únicamente para depuración o análisis de protocolo, restrinja el acceso al archivo y elimínelo cuando ya no sea necesario.

ssl_ntls#

Sintaxis

ssl_ntls on | off;

Predeterminado

ssl_ntls off;

Contexto

http, server

Habilita el soporte del lado del servidor para NTLS cuando se utiliza la biblioteca TLS Tongsuo.

listen ... ssl;
ssl_ntls  on;

Nota

Angie debe compilarse con el parámetro de configuración --with-ntls y una biblioteca SSL con soporte NTLS:

$ ./configure --with-openssl=../Tongsuo-8.3.0 \
              --with-openssl-opt=enable-ntls  \
              --with-ntls

ssl_ocsp#

Sintaxis

ssl_ocsp on | off | leaf;

Predeterminado

ssl_ocsp off;

Contexto

http, server

Habilita la validación OCSP de la cadena de certificados del cliente. El parámetro leaf habilita la validación solo del certificado del cliente.

Para que la validación OCSP funcione, la directiva ssl_verify_client debe establecerse en on u optional.

Para resolver el nombre de host del respondedor OCSP, también debe especificarse la directiva resolver.

Ejemplo:

ssl_verify_client on;
ssl_ocsp          on;
resolver          127.0.0.53;

ssl_ocsp_cache#

Sintaxis

ssl_ocsp_cache off | [shared:name:size];

Predeterminado

ssl_ocsp_cache off;

Contexto

http, server

Establece el nombre y tamaño de la caché que almacena el estado del certificado del cliente para la validación OCSP. La caché se comparte entre todos los procesos de trabajo. Una caché con el mismo nombre puede utilizarse en varios servidores virtuales.

El parámetro off prohíbe el uso de la caché.

ssl_ocsp_responder#

Sintaxis

ssl_ocsp_responder uri;

Predeterminado

—

Contexto

http, server

Anula el URI del respondedor OCSP especificado en la extensión del certificado "Authority Information Access" para la validación de certificados de cliente.

Solo se admiten respondedores OCSP http://:

ssl_ocsp_responder http://ocsp.example.com/;

ssl_password_file#

Sintaxis

ssl_password_file file;

Predeterminado

—

Contexto

http, server

Especifica un archivo con frases de contraseña para claves secretas donde cada frase de contraseña se especifica en una línea separada. Las frases de contraseña se prueban sucesivamente al cargar la clave.

Ejemplo:

http {
    ssl_password_file /etc/keys/global.pass;
    ...

    server {
        server_name www1.example.com;
        ssl_certificate_key /etc/keys/first.key;
    }

    server {
        server_name www2.example.com;

        # también se puede usar una tubería con nombre en lugar de un archivo
        ssl_password_file /etc/keys/fifo;
        ssl_certificate_key /etc/keys/second.key;
    }
}

ssl_prefer_server_ciphers#

Sintaxis

ssl_prefer_server_ciphers on | off;

Predeterminado

ssl_prefer_server_ciphers off;

Contexto

http, server

Especifica que los cifrados del servidor deben ser preferidos sobre los cifrados del cliente cuando se utilizan los protocolos SSLv3 y TLS.

ssl_protocols#

Sintaxis

ssl_protocols SSLv2 | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3 ...;

Predeterminado

ssl_protocols TLSv1.2 TLSv1.3;

Contexto

http, server

Habilita los protocolos especificados.

Nota

Los parámetros TLSv1.1 y TLSv1.2 solo funcionan cuando se utiliza OpenSSL 1.0.1 o superior.

El parámetro TLSv1.3 solo funciona cuando se utiliza OpenSSL 1.1.1 o superior.

ssl_reject_handshake#

Sintaxis

ssl_reject_handshake on | off;

Predeterminado

ssl_reject_handshake off;

Contexto

http, server

Si está habilitado, los handshakes SSL en el bloque server serán rechazados.

Por ejemplo, en la siguiente configuración, los handshakes SSL con nombres de servidor distintos a example.com son rechazados:

server {
    listen               443 ssl default_server;
    ssl_reject_handshake on;
}

server {
    listen              443 ssl;
    server_name         example.com;
    ssl_certificate     example.com.crt;
    ssl_certificate_key example.com.key;
}

ssl_session_cache#

Sintaxis

ssl_session_cache off | none | [builtin[:tamaño]] [shared:nombre:tamaño];

Predeterminado

ssl_session_cache none;

Contexto

http, server

Establece los tipos y tamaños de cachés que almacenan parámetros de sesión. Una caché puede ser de cualquiera de los siguientes tipos:

off

el uso de una caché de sesión está estrictamente prohibido: Angie explícitamente le dice al cliente que las sesiones no pueden ser reutilizadas.

none

el uso de una caché de sesión está suavemente deshabilitado: Angie le dice al cliente que las sesiones pueden ser reutilizadas, pero no almacena realmente los parámetros de sesión en la caché.

builtin

una caché integrada en OpenSSL; utilizada por un solo proceso de trabajo. El tamaño de la caché se especifica en sesiones. Si no se proporciona el tamaño, es igual a 20480 sesiones. El uso de la caché integrada puede causar fragmentación de memoria.

shared

una caché compartida entre todos los procesos de trabajo. El tamaño de la caché se especifica en bytes; un megabyte puede almacenar aproximadamente 4000 sesiones. Cada caché compartida debe tener un nombre arbitrario. Una caché con el mismo nombre puede ser utilizada en varios servidores virtuales. También se utiliza para generar automáticamente, almacenar y rotar periódicamente las claves de ticket de sesión TLS a menos que se configure explícitamente usando la directiva ssl_session_ticket_key.

Ambos tipos de caché pueden ser utilizados simultáneamente, por ejemplo:

ssl_session_cache builtin:1000 shared:SSL:10m;

pero usar solo la caché compartida sin la caché integrada debería ser más eficiente.

ssl_session_ticket_key#

Sintaxis

ssl_session_ticket_key archivo;

Predeterminado

—

Contexto

http, server

Establece un archivo con la clave secreta utilizada para cifrar y descifrar tickets de sesión TLS. La directiva es necesaria si la misma clave necesita ser compartida entre múltiples servidores. Por defecto, se utiliza una clave generada aleatoriamente.

Si se especifican varias claves, solo la primera clave se utiliza para cifrar los tickets de sesión TLS. Esto permite configurar la rotación de claves, por ejemplo:

ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;

El archivo debe contener 80 o 48 bytes de datos aleatorios y puede crearse utilizando el siguiente comando:

$ openssl rand 80 > ticket.key

Dependiendo del tamaño del archivo, se utilizará AES256 (para claves de 80 bytes) o AES128 (para claves de 48 bytes) para el cifrado.

ssl_session_tickets#

Sintaxis

ssl_session_tickets on | off;

Predeterminado

ssl_session_tickets on;

Contexto

http, server

Habilita o deshabilita la reanudación de sesión a través de tickets de sesión TLS.

ssl_session_timeout#

Sintaxis

ssl_session_timeout tiempo;

Predeterminado

ssl_session_timeout 5m;

Contexto

http, server

Especifica un tiempo durante el cual un cliente puede reutilizar los parámetros de sesión.

ssl_stapling#

Sintaxis

ssl_stapling on | off;

Predeterminado

ssl_stapling off;

Contexto

http, server

Habilita o deshabilita el grapado de respuestas OCSP por el servidor. Ejemplo:

ssl_stapling on;
resolver 127.0.0.53;

Para que el grapado OCSP funcione, el certificado del emisor del certificado del servidor debe ser conocido. Si el archivo ssl_certificate no contiene certificados intermedios, el certificado del emisor del certificado del servidor debe estar presente en el archivo especificado por la directiva ssl_trusted_certificate.

Advertencia

Para la resolución del nombre de host del respondedor OCSP, también debe especificarse la directiva resolver.

ssl_stapling_file#

Sintaxis

ssl_stapling_file archivo;

Predeterminado

—

Contexto

http, server

Cuando se establece, la respuesta OCSP grapada se tomará del archivo especificado en lugar de consultar al respondedor OCSP especificado en el certificado del servidor.

El archivo debe estar en formato DER, tal como lo produce el comando openssl ocsp.

ssl_stapling_responder#

Sintaxis

ssl_stapling_responder url;

Predeterminado

—

Contexto

http, server

Sobrescribe la URI del respondedor OCSP especificada en la extensión de certificado "Authority Information Access".

Solo se admiten respondedores OCSP http://:

ssl_stapling_responder http://ocsp.example.com/;

ssl_stapling_verify#

Sintaxis

ssl_stapling_verify on | off;

Predeterminado

ssl_stapling_verify off;

Contexto

http, server

Habilita o deshabilita la verificación de respuestas OCSP por el servidor.

Para que la verificación funcione, el certificado del emisor del certificado del servidor, el certificado raíz y todos los certificados intermedios deben configurarse como confiables utilizando la directiva ssl_trusted_certificate.

ssl_trusted_certificate#

Sintaxis

ssl_trusted_certificate archivo;

Predeterminado

—

Contexto

http, server

Especifica un archivo con certificados CA de confianza en formato PEM utilizados para verificar certificados de cliente y respuestas OCSP si ssl_stapling está habilitado.

A diferencia del conjunto de certificados establecido por ssl_client_certificate, la lista de estos certificados no se enviará a los clientes.

ssl_verify_client#

Sintaxis

ssl_verify_client on | off | optional | optional_no_ca;

Predeterminado

ssl_verify_client off;

Contexto

http, server

Habilita la verificación de certificados de cliente. El resultado de la verificación se almacena en la variable $ssl_client_verify.

optional

solicita el certificado del cliente y lo verifica si el certificado está presente.

optional_no_ca

solicita el certificado del cliente pero no requiere que esté firmado por un certificado CA de confianza. Esto está destinado a usarse en casos en los que un servicio externo a Angie realiza la verificación real del certificado.

ssl_verify_depth#

Sintaxis

ssl_verify_depth número;

Predeterminado

ssl_verify_depth 1;

Contexto

http, server

Establece la profundidad de verificación en la cadena de certificados del cliente.

Procesamiento de errores#

El módulo http_ssl admite varios códigos de error no estándar que pueden utilizarse para redirecciones mediante la directiva error_page:

495

se ha producido un error durante la verificación del certificado del cliente;

496

un cliente no ha presentado el certificado requerido;

497

se ha enviado una solicitud normal al puerto HTTPS.

La redirección ocurre después de que la solicitud se analiza completamente y las variables, como $request_uri, $uri, $args y otras, están disponibles.

Variables integradas#

El módulo http_ssl admite variables integradas:

$ssl_alpn_protocol#

devuelve el protocolo seleccionado por ALPN durante el handshake SSL, o una cadena vacía en caso contrario.

$ssl_cipher#

devuelve el nombre del cifrado utilizado para una conexión SSL establecida.

$ssl_ciphers#

devuelve la lista de cifrados compatibles con el cliente. Los cifrados conocidos se enumeran por nombres, los desconocidos se muestran en hexadecimal, por ejemplo:

AES128-SHA:AES256-SHA:0x00ff

Nota

La variable solo es totalmente compatible cuando se utiliza OpenSSL versión 1.0.2 o superior. Con versiones anteriores, la variable solo está disponible para nuevas sesiones y enumera únicamente los cifrados conocidos.

$ssl_client_escaped_cert#

devuelve el certificado del cliente en formato PEM (codificado en URL) para una conexión SSL establecida.

$ssl_client_fingerprint#

devuelve la huella SHA1 del certificado del cliente para una conexión SSL establecida.

$ssl_client_i_dn#

devuelve la cadena "issuer DN" del certificado del cliente para una conexión SSL establecida según RFC 2253.

$ssl_client_i_dn_legacy#

devuelve la cadena "issuer DN" del certificado del cliente para una conexión SSL establecida.

$ssl_client_raw_cert#

devuelve el certificado del cliente en formato PEM para una conexión SSL establecida.

$ssl_client_s_dn#

devuelve la cadena "subject DN" del certificado del cliente para una conexión SSL establecida según RFC 2253.

$ssl_client_s_dn_legacy#

devuelve la cadena "subject DN" del certificado del cliente para una conexión SSL establecida.

$ssl_client_serial#

devuelve el número de serie del certificado del cliente para una conexión SSL establecida.

$ssl_client_sigalg#

devuelve el algoritmo de firma del certificado del cliente para una conexión SSL establecida.

Nota

La variable solo es compatible cuando se utiliza OpenSSL versión 3.5 o superior. Con versiones anteriores, el valor de la variable será una cadena vacía.

Nota

La variable solo está disponible para nuevas sesiones.

$ssl_client_v_end#

devuelve la fecha de finalización del certificado del cliente.

$ssl_client_v_remain#

devuelve el número de días hasta que caduque el certificado del cliente.

$ssl_client_v_start#

devuelve la fecha de inicio del certificado del cliente.

$ssl_client_verify#

devuelve el resultado de la verificación del certificado del cliente: SUCCESS, FAILED:reason, y NONE si no se presentó un certificado.

$ssl_curve#

devuelve la curva negociada utilizada para el intercambio de claves durante el handshake SSL. Las curvas conocidas se enumeran por nombres, las desconocidas se muestran en hexadecimal, por ejemplo:

prime256v1

Nota

La variable solo es compatible cuando se utiliza OpenSSL versión 3.0 o superior. Con versiones anteriores, el valor de la variable será una cadena vacía.

$ssl_curves#

devuelve la lista de curvas compatibles con el cliente. Las curvas conocidas se enumeran por nombres, las desconocidas se muestran en hexadecimal, por ejemplo:

0x001d:prime256v1:secp521r1:secp384r1

Nota

La variable solo es compatible cuando se utiliza OpenSSL versión 1.0.2 o superior. Con versiones anteriores, el valor de la variable será una cadena vacía.

Nota

La variable solo está disponible para nuevas sesiones.

$ssl_early_data#

devuelve "1" si se utilizan datos tempranos de TLS 1.3 y el handshake no está completo, de lo contrario "".

$ssl_encrypted_hello#

Added in version 1.11.0.

devuelve "1" si el ClientHello se descifró mediante la extensión TLS Encrypted Client Hello (ECH), de lo contrario "".

$ssl_protocol#

devuelve el protocolo de una conexión SSL establecida.

$ssl_server_cert_type#

toma los valores RSA, DSA, ECDSA, ED448, ED25519, SM2, RSA-PSS, o unknown dependiendo del tipo de certificado y clave del servidor.

$ssl_server_name#

devuelve el nombre del servidor solicitado a través de SNI.

$ssl_session_id#

devuelve el identificador de sesión de una conexión SSL establecida.

$ssl_session_reused#

devuelve "r" si se reutilizó una sesión SSL, o "." en caso contrario.

$ssl_sigalg#

devuelve el algoritmo de firma del certificado del servidor para una conexión SSL establecida.

Nota

La variable solo es compatible cuando se utiliza OpenSSL versión 3.5 o superior. Con versiones anteriores, el valor de la variable será una cadena vacía.

Nota

La variable solo está disponible para nuevas sesiones.

$ssl_sigalgs#

devuelve la lista de algoritmos de firma ofrecidos por el cliente durante el handshake SSL, como una lista separada por dos puntos.

Nota

Con OpenSSL versión 4.0 o superior, los algoritmos se devuelven por nombre; un algoritmo sin nombre recurre a su código hexadecimal sin procesar. Las bibliotecas SSL que exponen la API de algoritmos de firma más antigua devuelven todos los algoritmos como códigos hexadecimales sin procesar. Las compilaciones sin una API de algoritmos de firma compatible devuelven un valor vacío.