SSL#

El módulo habilita el soporte de cifrado SSL/TLS para protocolos de proxy de correo (POP3, IMAP, SMTP), permitiendo una comunicación segura entre clientes y el servidor. Proporciona cifrado SSL/TLS para conexiones entrantes, soporta actualizaciones STARTTLS, gestiona certificados y claves, y controla configuraciones SSL como cifrados y versiones de protocolo.

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‑mail_ssl_module build option.

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

worker_processes auto;

mail {

    ...

    server {
        listen              993 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;

    #    ...
    }

Directivas#

ssl_certificate#

Sintaxis

ssl_certificate archivo;

Predeterminado

Contexto

mail, server

Especifica un archivo con el certificado en formato PEM para el servidor dado. Si se deben especificar certificados intermedios además de un certificado primario, deben especificarse en el mismo archivo en el siguiente orden: primero el certificado primario, luego los certificados intermedios. Una clave secreta en formato PEM puede colocarse en el mismo archivo.

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

server {
    listen              993 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.

El valor data:`certificate` puede ser especificado en lugar de archivo, lo que carga un certificado sin usar archivos intermedios.

Tenga en cuenta que el uso inadecuado de esta sintaxis puede tener implicaciones de seguridad, como escribir datos de clave secreta en el registro de errores.

ssl_certificate_key#

Sintaxis

ssl_certificate_key archivo;

Predeterminado

Contexto

mail, server

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

Se puede especificar el valor engine:`name`:id en lugar de archivo, lo que carga una clave secreta con un id específico desde el motor OpenSSL name.

Se puede especificar el valor data:`key` en lugar de archivo, lo que carga una clave secreta sin usar archivos intermedios. Tenga en cuenta que el uso inadecuado de esta sintaxis puede tener implicaciones de seguridad, como escribir datos de clave secreta en el registro de errores.

ssl_ciphers#

Sintaxis

ssl_ciphers cifrados;

Predeterminado

ssl_ciphers HIGH:!aNULL:!MD5;

Contexto

mail, 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

La directiva ssl_ciphers no configura cifrados para TLS 1.3 cuando se usa OpenSSL. Para ajustar los cifrados TLS 1.3 con OpenSSL, use la directiva ssl_conf_command, que fue añadida para admitir configuración SSL avanzada.

  • 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

mail, server

Especifica un archivo con certificados CA de confianza en formato PEM utilizados para verificar certificados de cliente.

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

mail, server

Establece comandos de configuración OpenSSL arbitrarios commands.

Nota

La directiva es compatible cuando se usa 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:

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

Tenga en cuenta que configurar OpenSSL directamente podría resultar en un comportamiento inesperado.

ssl_crl#

Sintaxis

ssl_crl archivo;

Predeterminado

Contexto

mail, server

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

ssl_dhparam#

Sintaxis

ssl_dhparam archivo;

Predeterminado

Contexto

mail, server

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

Advertencia

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

ssl_ecdh_curve#

Sintaxis

ssl_ecdh_curve curva;

Predeterminado

ssl_ecdh_curve auto;

Contexto

mail, server

Especifica una curva para cifrados ECDHE.

Nota

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

ssl_ecdh_curve prime256v1:secp384r1;

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

Nota

Cuando se usa 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_password_file#

Sintaxis

ssl_password_file archivo;

Predeterminado

Contexto

mail, 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:

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

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

    server {
        server_name mail2.example.com;

        # named pipe can also be used instead of a file
        ssl_password_file /etc/keys/fifo;
        ssl_certificate_key /etc/keys/second.key;
    }
}

ssl_prefer_server_ciphers#

Syntax

ssl_prefer_server_ciphers on | off;

Predeterminado

ssl_prefer_server_ciphers off;

Context

mail, 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#

Syntax

ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];

Predeterminado

ssl_protocols TLSv1.2 TLSv1.3;

Context

mail, server

Distinto en la versión 1.2.0: TLSv1.3 parámetro añadido al conjunto predeterminado.

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_session_cache#

Syntax

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

Predeterminado

ssl_session_cache none;

Context

mail, server

Establece los tipos y tamaños de cachés que almacenan los 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 a un cliente que las sesiones no pueden reutilizarse.

none

el uso de una caché de sesión está suavemente desaconsejado: Angie indica al cliente que las sesiones pueden reutilizarse, pero no almacena realmente los parámetros de sesión en la caché.

builtin

una caché integrada en OpenSSL; utilizada por un único 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 provocar fragmentación de la 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 utilizarse en varios servidores. También se utiliza para generar automáticamente, almacenar y rotar periódicamente las claves de tickets TLS de sesión, a menos que se configure explícitamente mediante la directiva ssl_session_ticket_key.

Ambos tipos de caché pueden usarse 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#

Syntax

ssl_session_ticket_key file;

Predeterminado

Context

mail, server

Establece un archivo con la clave secreta utilizada para cifrar y descifrar los tickets de sesión TLS. La directiva es necesaria si la misma clave debe 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 ser creado utilizando el siguiente comando:

openssl rand 80 > ticket.key

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

ssl_session_tickets#

Syntax

ssl_session_tickets on | off;

Predeterminado

ssl_session_tickets on;

Context

mail, server

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

ssl_session_timeout#

Syntax

ssl_session_timeout time;

Predeterminado

ssl_session_timeout 5m;

Context

mail, server

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

ssl_trusted_certificate#

Syntax

ssl_trusted_certificate file;

Predeterminado

Context

mail, server

Especifica un archivo con certificados CA de confianza en formato PEM usados para verificar certificados de cliente.

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

ssl_verify_client#

Syntax

ssl_verify_client on | off | optional | optional_no_ca;

Predeterminado

ssl_verify_client off;

Context

mail, server

Enables verification of client certificates. The verification result is passed in the Auth-SSL-Verify header of the authentication request. If an error occurs during client certificate verification or a client does not provide the required certificate, the connection is closed.

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 ser utilizado en casos en los que un servicio externo a Angie realiza la verificación real del certificado. El contenido del certificado es accesible a través de solicitudes enviadas al servidor de autenticación.

ssl_verify_depth#

Syntax

ssl_verify_depth number;

Predeterminado

ssl_verify_depth 1;

Context

mail, server

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

starttls#

Syntax

starttls on | off | only;

Predeterminado

starttls off;

Context

mail, server

on

allow usage of the STLS command for the POP3 and the STARTTLS command for the IMAP and SMTP;

off

deny usage of the STLS and STARTTLS commands;

only

require preliminary TLS transition.