<!-- review: finished -->

<a id="stream-ssl"></a>

# SSL

Proporciona el soporte necesario para que un servidor proxy de stream funcione con el protocolo SSL/TLS.

Cuando se [compila a partir del código fuente](https://es.angie.software//angie/docs/installation/sourcebuild.md#sourcebuild),
este módulo no se incluye de forma predeterminada;
debe habilitarse con la
[opción de compilación](https://es.angie.software//angie/docs/installation/sourcebuild.md#configure) `--with-stream_ssl_module`.

En los paquetes e imágenes de [nuestros repositorios](https://es.angie.software//angie/docs/installation/index.md#install-packages),
el módulo está incluido en la compilación.

#### NOTE
Este módulo requiere la biblioteca OpenSSL.

<a id="configuration-example-71"></a>

## Ejemplo de configuración

Para reducir la carga del procesador, se recomienda:

* establecer el número de [procesos de trabajo](https://es.angie.software//angie/docs/configuration/modules/core.md#worker-processes) igual al número de procesadores,
* habilitar la caché de sesiones [compartida](#s-ssl-session-cache),
* deshabilitar la caché de sesiones [integrada](#s-ssl-session-cache),
* y posiblemente aumentar el [tiempo de vida](#s-ssl-session-timeout) de las sesiones (por defecto, 5 minutos):

```nginx
worker_processes auto;

stream {

    #...

    server {
        listen              12345 ssl;

        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;

    #    ...
    }
```

<a id="directives-80"></a>

## Directivas

<a id="index-0"></a>

<a id="s-ssl-alpn"></a>

### ssl_alpn

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_alpn` protocolo ...;   |
|--------------------------------------------------------------------------------------------|-----------------------------|
| Predeterminado                                                                             | —                           |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server              |

Especifica la lista de protocolos [ALPN](https://datatracker.ietf.org/doc/html/rfc7301) admitidos. Uno de los protocolos debe ser [negociado](#v-s-ssl-alpn-protocol) si el cliente utiliza ALPN:

```nginx
map $ssl_alpn_protocol $proxy {
    h2                 127.0.0.1:8001;
    http/1.1           127.0.0.1:8002;
}

server {
    listen      12346;
    proxy_pass  $proxy;
    ssl_alpn    h2 http/1.1;
}
```

<a id="index-1"></a>

<a id="s-ssl-certificate"></a>

### ssl_certificate

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_certificate` archivo;   |
|--------------------------------------------------------------------------------------------|------------------------------|
| Predeterminado                                                                             | —                            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server               |

Especifica un archivo con el certificado en formato PEM para el servidor dado. Si se deben especificar certificados intermedios además del certificado principal, deben incluirse en el mismo archivo en el siguiente orden: primero el certificado principal y luego los certificados intermedios. Una clave secreta en formato PEM también puede colocarse en el mismo archivo.

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

```nginx
server {
    listen              12345 ssl;

    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;

#    ...
}
```

Solo OpenSSL 1.0.2 o superior admite cadenas de certificados separadas para diferentes certificados. Con versiones anteriores, solo se puede usar una cadena de certificados.

#### NOTE
Se pueden usar variables en el nombre del archivo al utilizar OpenSSL 1.0.2 o superior:

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

Tenga en cuenta que el uso de variables implica que se cargará un certificado para cada negociación SSL, lo que puede tener un impacto negativo en el rendimiento.

En lugar de `archivo`, se puede especificar el valor `data:`$variable``, que carga un certificado desde una variable sin utilizar archivos intermedios.

Tenga en cuenta que el uso inapropiado de esta sintaxis puede tener implicaciones de seguridad, como escribir datos de claves secretas en el [registro de errores](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log).

<a id="index-2"></a>

<a id="s-ssl-certificate-compression"></a>

### ssl_certificate_compression

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_certificate_compression` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|-----------------------------------------------|
| Predeterminado                                                                             | `ssl_certificate_compression off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                                |

Habilita la [compresión](https://datatracker.ietf.org/doc/html/rfc8879) de certificados de servidor TLS 1.3.

#### NOTE
La directiva es compatible al usar OpenSSL 3.2 o superior; la lista de algoritmos de compresión admitidos es proporcionada por la biblioteca.

#### NOTE
La directiva es compatible al usar [BoringSSL](https://boringssl.googlesource.com/boringssl/); la lista de algoritmos de compresión admitidos incluye `zlib`.

Si se habilita [ssl_stapling](#s-ssl-stapling), la compresión de certificados se deshabilita.

<a id="index-3"></a>

<a id="s-ssl-certificate-key"></a>

### ssl_certificate_key

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_certificate_key` archivo;   |
|--------------------------------------------------------------------------------------------|----------------------------------|
| Predeterminado                                                                             | —                                |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                   |

Especifica un archivo con la clave secreta en formato PEM para el servidor dado.

#### NOTE
Se pueden usar variables en el nombre del archivo al utilizar OpenSSL 1.0.2 o superior.

En lugar de `archivo`, se puede especificar el valor `engine:`nombre`:id`, que carga una clave secreta con un id determinado desde el motor OpenSSL nombre.

En lugar de `archivo`, se puede especificar el valor `store:esquema:id`, que se utiliza para cargar una clave secreta con un id especificado y un URI esquema registrado en el proveedor OpenSSL, como [pkcs11](https://datatracker.ietf.org/doc/html/rfc7512).

También se puede especificar el valor `data:`$variable`` en lugar de `archivo`, que carga una clave secreta desde una variable sin usar archivos intermedios. Tenga en cuenta que el uso inapropiado de esta sintaxis puede tener implicaciones de seguridad, como escribir datos de claves secretas en el [registro de errores](https://es.angie.software//angie/docs/configuration/modules/core.md#error-log).

<a id="index-4"></a>

<a id="s-ssl-ciphers"></a>

### ssl_ciphers

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_ciphers` cifrados;         |
|--------------------------------------------------------------------------------------------|---------------------------------|
| Predeterminado                                                                             | `ssl_ciphers HIGH:!aNULL:!MD5;` |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                  |

Especifica los cifrados habilitados. Los cifrados se indican en el formato que entiende la biblioteca OpenSSL, por ejemplo:

```nginx
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 puede consultarse con el comando `openssl ciphers`.

#### WARNING
La directiva `ssl_ciphers` *no* configura los cifrados para TLS 1.3 al usar OpenSSL. Para configurar los cifrados TLS 1.3 con OpenSSL, utilice la directiva [ssl_conf_command](#s-ssl-conf-command), añadida para soportar configuración SSL avanzada.

- En LibreSSL, los cifrados TLS 1.3 *sí* pueden configurarse usando `ssl_ciphers`.
- En BoringSSL, los cifrados TLS 1.3 no pueden configurarse en absoluto.

<a id="index-5"></a>

<a id="s-ssl-client-certificate"></a>

### ssl_client_certificate

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_client_certificate` archivo;   |
|--------------------------------------------------------------------------------------------|-------------------------------------|
| Predeterminado                                                                             | —                                   |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                      |

Especifica un archivo con certificados de CA confiables en formato PEM usados para [verificar](#s-ssl-verify-client) los certificados de cliente y respuestas OCSP si se habilita [ssl_stapling](#s-ssl-stapling).

La lista de certificados se enviará a los clientes. Si esto no es deseado, se puede usar la directiva [ssl_trusted_certificate](#s-ssl-trusted-certificate).

<a id="index-6"></a>

<a id="s-ssl-conf-command"></a>

### ssl_conf_command

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_conf_command` nombre valor;   |
|--------------------------------------------------------------------------------------------|------------------------------------|
| Predeterminado                                                                             | —                                  |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                     |

Establece [comandos](https://docs.openssl.org/master/man3/SSL_CONF_cmd/) arbitrarios de configuración de OpenSSL.

#### NOTE
La directiva es compatible al usar OpenSSL 1.0.2 o superior.
Para configurar cifrados TLS 1.3 con OpenSSL, use el comando `ciphersuites`.

Se pueden especificar varias directivas ssl_conf_command en el mismo nivel:

```nginx
ssl_conf_command Options PrioritizeChaCha;
ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;
```

Estas directivas se heredan del nivel de configuración anterior únicamente si no se definen directivas ssl_conf_command en el nivel actual.

#### WARNING
Configurar OpenSSL directamente puede resultar en un comportamiento inesperado.

<a id="index-7"></a>

<a id="s-ssl-crl"></a>

### ssl_crl

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_crl` archivo;   |
|--------------------------------------------------------------------------------------------|----------------------|
| Predeterminado                                                                             | —                    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server       |

Especifica un archivo con certificados revocados (CRL) en formato PEM usados para [verificar](#s-ssl-verify-client) los certificados de cliente.

<a id="index-8"></a>

<a id="s-ssl-dhparam"></a>

### ssl_dhparam

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_dhparam` archivo;   |
|--------------------------------------------------------------------------------------------|--------------------------|
| Predeterminado                                                                             | —                        |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server           |

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

#### WARNING
Por defecto no se establecen parámetros, y por lo tanto no se usarán cifrados DHE.

<a id="index-9"></a>

<a id="s-ssl-early-data"></a>

### ssl_early_data

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_early_data` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|----------------------------------|
| Predeterminado                                                                             | `ssl_early_data off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                   |

Habilita o deshabilita los [early data](https://datatracker.ietf.org/doc/html/rfc8446#section-2.3) de TLS 1.3.

#### NOTE
La directiva es compatible al usar OpenSSL 1.1.1 o superior o [BoringSSL](https://boringssl.googlesource.com/boringssl/).

<a id="index-10"></a>

<a id="s-ssl-encrypted-hello-key"></a>

### ssl_encrypted_hello_key

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_encrypted_hello_key` archivo;   |
|--------------------------------------------------------------------------------------------|--------------------------------------|
| Predeterminado                                                                             | —                                    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                       |

Especifica un archivo con una clave privada ECH y ECHConfigList en formato PEM.
La directiva puede especificarse varias veces.
Requiere una compilación de OpenSSL o BoringSSL con soporte para Encrypted Client Hello (ECH);
de lo contrario, no es compatible.

<a id="index-11"></a>

<a id="s-ssl-ecdh-curve"></a>

### ssl_ecdh_curve

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_ecdh_curve` curva;   |
|--------------------------------------------------------------------------------------------|---------------------------|
| Predeterminado                                                                             | `ssl_ecdh_curve auto;`    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server            |

Especifica una curva para cifrados ECDHE.

#### NOTE
Al usar OpenSSL 1.0.2 o superior, es posible especificar múltiples curvas, por ejemplo:

```nginx
ssl_ecdh_curve prime256v1:secp384r1;
```

El valor especial `auto` indica a Angie que use una lista integrada en la biblioteca OpenSSL cuando se usa OpenSSL 1.0.2 o superior, o prime256v1 con versiones anteriores.

#### NOTE
Al usar OpenSSL 1.0.2 o superior, esta directiva establece la lista de curvas admitidas por el servidor. Por lo tanto, para que los certificados ECDSA funcionen, es importante incluir las curvas usadas en los certificados.

<a id="index-12"></a>

<a id="s-ssl-handshake-timeout"></a>

### ssl_handshake_timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_handshake_timeout` tiempo;   |
|--------------------------------------------------------------------------------------------|-----------------------------------|
| Predeterminado                                                                             | `ssl_handshake_timeout 60s;`      |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                    |

Especifica un tiempo de espera para que se complete el handshake SSL.

<a id="index-13"></a>

<a id="s-ssl-ocsp"></a>

### ssl_ocsp

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_ocsp` `on` | `off` | `leaf`;   |
|--------------------------------------------------------------------------------------------|-------------------------------------|
| Predeterminado                                                                             | `ssl_ocsp off;`                     |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                      |

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

Para que la validación OCSP funcione, la directiva [ssl_verify_client](#s-ssl-verify-client) debe estar establecida en `on` u `optional`.

Para resolver el nombre de host del respondedor OCSP, también debe especificarse la directiva [resolver](https://es.angie.software//angie/docs/configuration/modules/stream/index.md#s-resolver).

Ejemplo:

```nginx
ssl_verify_client on;
ssl_ocsp          on;
resolver          127.0.0.53;
```

<a id="index-14"></a>

<a id="s-ssl-ocsp-cache"></a>

### ssl_ocsp_cache

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_ocsp_cache` `off` | [shared:nombre:tamaño];   |
|--------------------------------------------------------------------------------------------|----------------------------------------------------|
| Predeterminado                                                                             | `ssl_ocsp_cache off;`                              |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                                     |

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

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

<a id="index-15"></a>

<a id="s-ssl-ocsp-responder"></a>

### ssl_ocsp_responder

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_ocsp_responder` uri;   |
|--------------------------------------------------------------------------------------------|-----------------------------|
| Predeterminado                                                                             | —                           |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server              |

Sobrescribe la URI del respondedor OCSP especificada en la extensión del certificado ["Authority Information Access"](https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.2.1) para la [validación](#s-ssl-ocsp) de certificados de cliente.

Solo se admiten respondedores OCSP con `http://`:

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

<a id="index-16"></a>

<a id="s-ssl-ntls"></a>

### ssl_ntls

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_ntls` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|----------------------------|
| Predeterminado                                                                             | `ssl_ntls off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server             |

Habilita el soporte del lado del servidor para NTLS usando la biblioteca [TongSuo](https://github.com/Tongsuo-Project/Tongsuo).

```nginx
listen ... ssl;
ssl_ntls  on;
```

#### NOTE
Angie debe compilarse usando la opción de compilación `--with-ntls` y enlazarse con una biblioteca SSL habilitada para NTLS

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

<a id="index-17"></a>

<a id="s-ssl-password-file"></a>

### ssl_password_file

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_password_file` archivo;   |
|--------------------------------------------------------------------------------------------|--------------------------------|
| Predeterminado                                                                             | —                              |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                 |

Especifica un archivo con contraseñas para las [claves secretas](#s-ssl-certificate-key) donde cada contraseña se especifica en una línea separada. Las contraseñas se prueban en orden al cargar la clave.

Ejemplo:

```nginx
stream {
    ssl_password_file /etc/keys/global.pass;
    ...

    server {
        listen 127.0.0.1:12345;
        ssl_certificate_key /etc/keys/first.key;
    }

    server {
        listen 127.0.0.1:12346;

        # también puede usarse un named pipe en lugar de un archivo
        ssl_password_file /etc/keys/fifo;
        ssl_certificate_key /etc/keys/second.key;
    }
}
```

<a id="index-18"></a>

<a id="s-ssl-prefer-server-ciphers"></a>

### ssl_prefer_server_ciphers

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_prefer_server_ciphers` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|---------------------------------------------|
| Predeterminado                                                                             | `ssl_prefer_server_ciphers off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                              |

Especifica que deben preferirse los cifrados del servidor sobre los cifrados del cliente cuando se usan los protocolos SSLv3 y TLS.

<a id="index-19"></a>

<a id="s-ssl-protocols"></a>

### ssl_protocols

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_protocols` [`SSLv2`] [`SSLv3`] [`TLSv1`] [`TLSv1.1`] [`TLSv1.2`] [`TLSv1.3`];   |
|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
| Predeterminado                                                                             | `ssl_protocols TLSv1.2 TLSv1.3;`                                                     |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                                                                       |

#### Versionchanged
Distinto en la versión 1.2.0: Se añadió el parámetro `TLSv1.3` al conjunto predeterminado.

Habilita los protocolos especificados.

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

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

<a id="index-20"></a>

<a id="s-ssl-session-cache"></a>

### ssl_session_cache

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_session_cache` `off` | `none` | [builtin[:tamaño]] [shared:nombre:tamaño];   |
|--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|
| Predeterminado                                                                             | `ssl_session_cache none;`                                                         |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, 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 indica explícitamente al cliente que las sesiones no pueden reutilizarse.                                                                                                                                                                                                                                                                                                                                                                     |
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `none`    | el uso de una caché de sesión está suavemente deshabilitado: Angie indica al cliente que las sesiones pueden reutilizarse, pero en realidad no almacena parámetros de sesión en la caché.                                                                                                                                                                                                                                                                                                                       |
| `builtin` | una caché integrada en OpenSSL; usada solo por un proceso worker. El tamaño de la caché se especifica en sesiones. Si no se indica 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 worker. El tamaño de la caché se especifica en bytes; un megabyte puede almacenar unas 4000 sesiones. Cada caché compartida debe tener un nombre arbitrario. Una caché con el mismo nombre puede usarse en varios servidores. También se usa para generar, almacenar y rotar periódicamente las claves de tickets de sesión TLS automáticamente, a menos que se configure explícitamente usando la directiva [ssl_session_ticket_key](#s-ssl-session-ticket-key). |

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

```nginx
ssl_session_cache builtin:1000 shared:SSL:10m;
```

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

<a id="index-21"></a>

<a id="s-ssl-session-ticket-key"></a>

### ssl_session_ticket_key

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_session_ticket_key` archivo;   |
|--------------------------------------------------------------------------------------------|-------------------------------------|
| Predeterminado                                                                             | —                                   |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                      |

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

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

```nginx
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 usando el siguiente comando:

```console
openssl rand 80 > ticket.key
```

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

<a id="index-22"></a>

<a id="s-ssl-session-tickets"></a>

### ssl_session_tickets

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_session_tickets` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|---------------------------------------|
| Predeterminado                                                                             | `ssl_session_tickets on;`             |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                        |

Habilita o deshabilita la reanudación de sesión mediante [tickets de sesión TLS](https://datatracker.ietf.org/doc/html/rfc5077).

<a id="index-23"></a>

<a id="s-ssl-session-timeout"></a>

### ssl_session_timeout

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_session_timeout` tiempo;   |
|--------------------------------------------------------------------------------------------|---------------------------------|
| Predeterminado                                                                             | `ssl_session_timeout 5m;`       |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                  |

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

<a id="index-24"></a>

<a id="s-ssl-stapling"></a>

### ssl_stapling

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_stapling` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|--------------------------------|
| Predeterminado                                                                             | `ssl_stapling off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                   |

Habilita o deshabilita el [grapado de respuestas OCSP](https://datatracker.ietf.org/doc/html/rfc6066#section-8) por parte del servidor.
Ejemplo:

```nginx
ssl_stapling on;
resolver 127.0.0.53;
```

Para que el grapado OCSP funcione, debe conocerse el certificado del emisor del certificado del servidor. Si el archivo [ssl_certificate](#s-ssl-certificate) no contiene certificados intermedios, el certificado del emisor del certificado del servidor debe estar presente en el archivo [ssl_trusted_certificate](#s-ssl-trusted-certificate).

#### WARNING
Para la resolución del nombre de host del respondedor OCSP, también debe especificarse la directiva [resolver](https://es.angie.software//angie/docs/configuration/modules/stream/index.md#s-resolver).

<a id="index-25"></a>

<a id="s-ssl-stapling-file"></a>

### ssl_stapling_file

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_stapling_file` archivo;   |
|--------------------------------------------------------------------------------------------|--------------------------------|
| Predeterminado                                                                             | —                              |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | 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`.

<a id="index-26"></a>

<a id="s-ssl-stapling-responder"></a>

### ssl_stapling_responder

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_stapling_responder` uri;   |
|--------------------------------------------------------------------------------------------|---------------------------------|
| Predeterminado                                                                             | —                               |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                    |

Sobrescribe la URI del respondedor OCSP especificado en la extensión del certificado ["Authority Information
Access"](https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.2.1).

Solo se admiten respondedores OCSP con `http://`:

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

<a id="index-27"></a>

<a id="s-ssl-stapling-verify"></a>

### ssl_stapling_verify

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_stapling_verify` `on` | `off`;   |
|--------------------------------------------------------------------------------------------|---------------------------------------|
| Predeterminado                                                                             | `ssl_stapling_verify off;`            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | http, server                          |

Habilita o deshabilita la verificación de respuestas OCSP por parte del 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 de confianza mediante la directiva [ssl_trusted_certificate](#s-ssl-trusted-certificate).

<a id="index-28"></a>

<a id="s-ssl-trusted-certificate"></a>

### ssl_trusted_certificate

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_trusted_certificate` archivo;   |
|--------------------------------------------------------------------------------------------|--------------------------------------|
| Predeterminado                                                                             | —                                    |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                       |

Especifica un archivo con certificados CA de confianza en formato PEM utilizados para [verificar](#s-ssl-verify-client) certificados de cliente.

A diferencia del conjunto de certificados establecido por [ssl_client_certificate](#s-ssl-client-certificate), la lista de estos certificados no se enviará a los clientes.

<a id="index-29"></a>

<a id="s-ssl-verify-client"></a>

### ssl_verify_client

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_verify_client` `on` | `off` | `optional` | `optional_no_ca`;   |
|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------|
| Predeterminado                                                                             | `ssl_verify_client off;`                                            |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server                                                      |

Habilita la verificación de certificados de cliente. El resultado de la verificación se almacena en la variable [$ssl_client_verify](#v-s-ssl-client-verify). Si ocurre un error durante la verificación del certificado de cliente o el cliente no presenta el certificado requerido, la conexión se cierra.

| `optional`       | solicita el certificado de cliente y lo verifica si el certificado está presente.                                                                                                                                     |
|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `optional_no_ca` | solicita el certificado de cliente pero no requiere que esté firmado por un certificado CA de confianza. Está pensado para casos en los que un servicio externo a Angie realiza la verificación real del certificado. |

<a id="index-30"></a>

<a id="s-ssl-verify-depth"></a>

### ssl_verify_depth

| [Sintaxis](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | `ssl_verify_depth` número;   |
|--------------------------------------------------------------------------------------------|------------------------------|
| Predeterminado                                                                             | `ssl_verify_depth 1;`        |
| [Contexto](https://es.angie.software//angie/docs/configuration/configfile.md#configfile)   | stream, server               |

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

<a id="built-in-variables-23"></a>

## Variables integradas

El módulo `stream_ssl` admite las siguientes variables:

<a id="v-s-ssl-alpn-protocol"></a>

### `$ssl_alpn_protocol`

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

<a id="v-s-ssl-cipher"></a>

### `$ssl_cipher`

devuelve el nombre del cifrado usado en una conexión SSL establecida.

<a id="v-s-ssl-ciphers"></a>

### `$ssl_ciphers`

devuelve la lista de cifrados admitidos por el cliente. Los cifrados conocidos se muestran por nombre, los desconocidos en hexadecimal, por ejemplo:

> AES128-SHA:AES256-SHA:0x00ff

#### NOTE
La variable está totalmente soportada solo al usar OpenSSL versión 1.0.2 o superior. Con versiones anteriores, la variable está disponible solo para sesiones nuevas y muestra únicamente los cifrados conocidos.

<a id="v-s-ssl-client-cert"></a>

### `$ssl_client_cert`

devuelve el certificado de cliente en formato PEM para una conexión SSL establecida, con cada línea (excepto la primera) precedida por un carácter de tabulación.

<a id="v-s-ssl-client-fingerprint"></a>

### `$ssl_client_fingerprint`

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

<a id="v-s-ssl-client-i-dn"></a>

### `$ssl_client_i_dn`

devuelve la cadena "issuer DN" del certificado de cliente para una conexión SSL establecida, según [RFC 2253](https://datatracker.ietf.org/doc/html/rfc2253).

<a id="v-s-ssl-client-raw-cert"></a>

### `$ssl_client_raw_cert`

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

<a id="v-s-ssl-client-s-dn"></a>

### `$ssl_client_s_dn`

devuelve la cadena "subject DN" del certificado de cliente para una conexión SSL establecida, según [RFC 2253](https://datatracker.ietf.org/doc/html/rfc2253).

<a id="v-s-ssl-client-serial"></a>

### `$ssl_client_serial`

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

<a id="v-s-ssl-client-sigalg"></a>

### `$ssl_client_sigalg`

devuelve el [algoritmo de firma](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-16) del certificado de cliente para una conexión SSL establecida.

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

#### NOTE
La variable está disponible solo para sesiones nuevas.

<a id="v-s-ssl-client-v-end"></a>

### `$ssl_client_v_end`

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

<a id="v-s-ssl-client-v-remain"></a>

### `$ssl_client_v_remain`

devuelve el número de días restantes hasta que expire el certificado de cliente.

<a id="v-s-ssl-client-v-start"></a>

### `$ssl_client_v_start`

devuelve la fecha de inicio del certificado de cliente.

<a id="v-s-ssl-client-verify"></a>

### `$ssl_client_verify`

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

<a id="v-s-ssl-curve"></a>

### `$ssl_curve`

devuelve la curva negociada usada en el proceso de intercambio de claves del handshake SSL. Las curvas conocidas se muestran por nombre, las desconocidas en hexadecimal, por ejemplo:

> prime256v1

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

<a id="v-s-ssl-curves"></a>

### `$ssl_curves`

devuelve la lista de curvas admitidas por el cliente. Las curvas conocidas se muestran por nombre, las desconocidas en hexadecimal, por ejemplo:

> 0x001d:prime256v1:secp521r1:secp384r1

#### NOTE
La variable es compatible únicamente al usar OpenSSL versión 1.0.2 o superior. Con versiones anteriores, el valor de la variable será una cadena vacía.

La variable está disponible solo para sesiones nuevas.

<a id="v-s-ssl-early-data"></a>

### `$ssl_early_data`

devuelve "1" si se usa [early data](https://es.angie.software//angie/docs/configuration/modules/http/http_ssl.md#ssl-early-data) de TLS 1.3 y el handshake no está completo; en caso contrario devuelve "".

<a id="v-s-ssl-encrypted-hello"></a>

### `$ssl_encrypted_hello`

devuelve "1" si se usa Encrypted Client Hello (ECH); en caso contrario devuelve "".

<a id="v-s-ssl-protocol"></a>

### `$ssl_protocol`

devuelve el protocolo de una conexión SSL establecida.

<a id="v-s-ssl-server-cert-type"></a>

### `$ssl_server_cert_type`

toma los valores `RSA`, `DSA`, `ECDSA`, `ED448`, `ED25519`, `SM2`, `RSA-PSS` o `unknown` según el tipo de certificado y clave del servidor.

<a id="v-s-ssl-server-name"></a>

### `$ssl_server_name`

devuelve el nombre de servidor solicitado mediante [SNI](http://en.wikipedia.org/wiki/Server_Name_Indication).

<a id="v-s-ssl-session-id"></a>

### `$ssl_session_id`

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

<a id="v-s-ssl-session-reused"></a>

### `$ssl_session_reused`

devuelve "r" si una sesión SSL fue reutilizada, o "." en caso contrario.

<a id="v-s-ssl-sigalg"></a>

### `$ssl_sigalg`

devuelve el [algoritmo de firma](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-16) del certificado de servidor para una conexión SSL establecida.

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

#### NOTE
La variable está disponible solo para sesiones nuevas.
