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.

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;

        # también se puede usar un pipe 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

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#

Sintaxis

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

Predeterminado

ssl_protocols TLSv1.2 TLSv1.3;

Contexto

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#

Sintaxis

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

Predeterminado

ssl_session_cache none;

Contexto

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#

Sintaxis

ssl_session_ticket_key file;

Predeterminado

Contexto

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#

Sintaxis

ssl_session_tickets on | off;

Predeterminado

ssl_session_tickets on;

Contexto

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

Predeterminado

ssl_session_timeout 5m;

Contexto

mail, server

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

ssl_trusted_certificate#

Sintaxis

ssl_trusted_certificate file;

Predeterminado

Contexto

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#

Sintaxis

ssl_verify_client on | off | optional | optional_no_ca;

Predeterminado

ssl_verify_client off;

Contexto

mail, server

Habilita la verificación de certificados de cliente. El resultado de la verificación se pasa en la cabecera Auth-SSL-Verify de la solicitud de autenticación. Si ocurre un error durante la verificación del certificado del cliente o un cliente no proporciona el certificado requerido, la conexión se cierra.

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#

Sintaxis

ssl_verify_depth number;

Predeterminado

ssl_verify_depth 1;

Contexto

mail, server

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

starttls#

Sintaxis

starttls on | off | only;

Predeterminado

starttls off;

Contexto

mail, server

on

permite el uso del comando STLS para POP3 y el comando STARTTLS para IMAP y SMTP;

off

deniega el uso de los comandos STLS y STARTTLS;

only

requiere transición TLS preliminar.