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
establecer el número de procesos de trabajo igual al número de procesadores,
habilitar la caché de sesión compartida,
deshabilitar la caché de sesión incorporada,
y posiblemente aumentar la duración de la sesión (por defecto, 5 minutos):
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#
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#
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#
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#
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#
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#
Especifica un archivo con certificados revocados (CRL) en formato PEM utilizado para verificar certificados de cliente.
ssl_dhparam#
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#
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#
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#
| |
Predeterminado |
|
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#
| |
Predeterminado |
|
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#
| |
Predeterminado |
|
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:
| 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. |
| 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é. |
| 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. |
| 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#
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#
Habilita o deshabilita la reanudación de sesión a través de tickets de sesión TLS.
ssl_session_timeout#
Especifica un tiempo durante el cual un cliente puede reutilizar los parámetros de sesión.
ssl_trusted_certificate#
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#
| |
Predeterminado |
|
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.
| solicita el certificado del cliente y lo verifica si el certificado está presente |
| 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#
Establece la profundidad de verificación en la cadena de certificados del cliente.
starttls#
| allow usage of the STLS command for the POP3 and the STARTTLS command for the IMAP and SMTP; |
| deny usage of the STLS and STARTTLS commands; |
| require preliminary TLS transition. |