SSL#

O módulo habilita o suporte à criptografia SSL/TLS para protocolos de proxy de email (POP3, IMAP, SMTP), permitindo comunicação segura entre clientes e o servidor. Ele fornece criptografia SSL/TLS para conexões de entrada, suporta atualizações STARTTLS, gerencia certificados e chaves, e controla configurações SSL como cifras e versões de protocolo.

Ao compilar a partir do código-fonte, o módulo não é compilado por padrão; ele deve ser habilitado com a opção de compilação --with-mail_ssl_module.

Em pacotes e imagens de nossos repositórios, o módulo está incluído na compilação.

Nota

Este módulo requer a biblioteca OpenSSL.

Exemplo de configuração#

Para reduzir a carga do processador, recomenda-se:

Por exemplo:

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;

    #    ...
    }

Diretivas#

ssl_certificate#

Sintaxe

ssl_certificate file | data:certificate;

Padrão

—

Contexto

mail, server

Especifica o certificado no formato PEM para o servidor especificado. Certificados intermediários, se houver, vêm depois do certificado primário no mesmo arquivo ou valor; uma chave secreta no formato PEM também pode ser colocada ali.

O valor é interpretado como na diretiva ssl_certificate do módulo HTTP SSL: um caminho de arquivo ou o texto PEM do certificado após o prefixo data:. Variáveis não são suportadas: um caractere $ é tomado literalmente, como parte do nome do arquivo.

Esta diretiva pode ser especificada múltiplas vezes para carregar certificados de diferentes tipos, por exemplo, RSA e 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;

#    ...
}

ssl_certificate_compression#

Sintaxe

ssl_certificate_compression on | off;

Padrão

ssl_certificate_compression off;

Contexto

mail, server

Habilita compressão TLS 1.3 de certificados de servidor.

Nota

A diretiva é suportada ao usar OpenSSL 3.2 ou superior; a lista de algoritmos de compressão suportados é fornecida pela biblioteca.

Nota

A diretiva é suportada ao usar BoringSSL; a lista de algoritmos de compressão suportados inclui zlib.

ssl_certificate_key#

Sintaxe

ssl_certificate_key file | data:key | engine:name:id | store:uri;

Padrão

—

Contexto

mail, server

Especifica a chave secreta no formato PEM para o servidor especificado.

O valor, incluindo os prefixos engine: e store:, é interpretado como na diretiva ssl_certificate_key do módulo HTTP SSL; variáveis não são suportadas. Uma chave protegida por senha é descriptografada com as senhas de ssl_password_file.

ssl_ciphers#

Sintaxe

ssl_ciphers ciphers;

Padrão

ssl_ciphers HIGH:!aNULL:!MD5;

Contexto

mail, server

Especifica as cifras habilitadas. As cifras são especificadas no formato compreendido pela biblioteca OpenSSL, por exemplo:

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

A lista de cifras depende da versão do OpenSSL instalada. A lista completa pode ser visualizada usando o comando openssl ciphers.

Aviso

Com o OpenSSL, a diretiva ssl_ciphers não configura cifras TLS 1.3; defina-as com o comando Ciphersuites da diretiva ssl_conf_command. A diretiva ssl_ciphers ignora nomes de cifras TLS 1.3 em seu valor, portanto esses nomes não restringem as conexões TLS 1.3. Se o valor consistir apenas em tais nomes, por exemplo TLS_AES_128_GCM_SHA256, a configuração não é carregada, com o erro no cipher match.

  • No LibreSSL, cifras TLS 1.3 podem ser configuradas usando ssl_ciphers.

  • No BoringSSL, cifras TLS 1.3 não podem ser configuradas de forma alguma.

ssl_client_certificate#

Sintaxe

ssl_client_certificate file;

Padrão

—

Contexto

mail, server

Especifica um arquivo com certificados CA confiáveis no formato PEM usados para verificar certificados de cliente.

A lista de certificados será enviada aos clientes. Se isso não for desejado, a diretiva ssl_trusted_certificate pode ser usada.

ssl_conf_command#

Sintaxe

ssl_conf_command name value;

Padrão

—

Contexto

mail, server

Define comandos de configuração OpenSSL arbitrários.

Nota

A diretiva é suportada ao usar OpenSSL 1.0.2 ou superior. O comando Ciphersuites, que define as cifras TLS 1.3, requer OpenSSL 1.1.1 ou superior.

Várias diretivas ssl_conf_command podem ser especificadas no mesmo nível:

ssl_conf_command Options PrioritizeChaCha;
ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;

Essas diretivas são herdadas do nível de configuração anterior se e somente se não há diretivas ssl_conf_command definidas no nível atual.

Aviso

Note que configurar o OpenSSL diretamente pode resultar em comportamento inesperado.

ssl_crl#

Sintaxe

ssl_crl file;

Padrão

—

Contexto

mail, server

Especifica um arquivo com certificados revogados (CRL) no formato PEM usados para verificar certificados de cliente.

ssl_dhparam#

Sintaxe

ssl_dhparam file;

Padrão

—

Contexto

mail, server

Especifica um arquivo com parâmetros DH para cifras DHE.

Aviso

Por padrão nenhum parâmetro é definido, e portanto cifras DHE não serão usadas.

ssl_ecdh_curve#

Sintaxe

ssl_ecdh_curve curve;

Padrão

ssl_ecdh_curve auto;

Contexto

mail, server

Especifica uma curva para cifras ECDHE.

Nota

Ao usar OpenSSL 1.0.2 ou superior, é possível especificar múltiplas curvas, por exemplo:

ssl_ecdh_curve prime256v1:secp384r1;

O valor especial auto instrui o Angie a usar uma lista integrada na biblioteca OpenSSL ao usar OpenSSL 1.0.2 ou superior, ou prime256v1 com versões mais antigas.

Nota

Ao usar OpenSSL 1.0.2 ou superior, esta diretiva define a lista de curvas suportadas pelo servidor. Assim, para que certificados ECDSA funcionem, é importante incluir as curvas usadas nos certificados.

ssl_password_file#

Sintaxe

ssl_password_file file;

Padrão

—

Contexto

mail, server

Especifica um arquivo com senhas para chaves secretas onde cada senha é especificada em uma linha separada. As senhas são tentadas em sequência ao carregar a chave.

Exemplo:

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;

        # pipe nomeado também pode ser usado em vez de um arquivo
        ssl_password_file /etc/keys/fifo;
        ssl_certificate_key /etc/keys/second.key;
    }
}

ssl_prefer_server_ciphers#

Sintaxe

ssl_prefer_server_ciphers on | off;

Padrão

ssl_prefer_server_ciphers off;

Contexto

mail, server

Especifica que as cifras do servidor devem ser preferidas sobre as cifras do cliente quando os protocolos SSLv3 e TLS são usados.

ssl_protocols#

Sintaxe

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

Padrão

ssl_protocols TLSv1.2 TLSv1.3;

Contexto

mail, server

Habilita os protocolos especificados.

Nota

Os parâmetros TLSv1.1 e TLSv1.2 funcionam apenas quando OpenSSL 1.0.1 ou superior é usado.

O parâmetro TLSv1.3 funciona apenas quando OpenSSL 1.1.1 ou superior é usado.

ssl_session_cache#

Sintaxe

ssl_session_cache off | none | [builtin[:tamanho]] [shared:nome:tamanho];

Padrão

ssl_session_cache none;

Contexto

mail, server

Define os tipos e tamanhos de caches que armazenam parâmetros de sessão. Um cache pode ser de qualquer um dos seguintes tipos:

off

o uso de um cache de sessão é estritamente proibido: o Angie explicitamente informa ao cliente que as sessões não podem ser reutilizadas.

none

o uso de um cache de sessão é gentilmente desencorajado: o Angie informa ao cliente que as sessões podem ser reutilizadas, mas não armazena realmente os parâmetros de sessão no cache.

builtin

um cache integrado no OpenSSL; usado por apenas um processo worker. O tamanho do cache é especificado em sessões. Se o tamanho não for fornecido, é igual a 20480 sessões. O uso do cache integrado pode causar fragmentação de memória.

shared

um cache compartilhado entre todos os processos worker. O tamanho do cache é especificado em bytes; um megabyte pode armazenar cerca de 4000 sessões. Cada cache compartilhado deve ter um nome arbitrário. Um cache com o mesmo nome pode ser usado em vários servidores. Também é usado para gerar automaticamente, armazenar e rotacionar periodicamente chaves de ticket de sessão TLS, a menos que configurado explicitamente usando a diretiva ssl_session_ticket_key.

Ambos os tipos de cache podem ser usados simultaneamente, por exemplo:

ssl_session_cache builtin:1000 shared:SSL:10m;

mas usar apenas cache compartilhado sem o cache integrado deve ser mais eficiente.

ssl_session_ticket_key#

Sintaxe

ssl_session_ticket_key arquivo;

Padrão

—

Contexto

mail, server

Define um arquivo com a chave secreta usada para criptografar e descriptografar tickets de sessão TLS. A diretiva é necessária se a mesma chave deve ser compartilhada entre múltiplos servidores. Por padrão, uma chave gerada aleatoriamente é usada.

Se várias chaves são especificadas, apenas a primeira chave é usada para criptografar tickets de sessão TLS. Isso permite configurar rotação de chaves, por exemplo:

ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;

O arquivo deve conter 80 ou 48 bytes de dados aleatórios e pode ser criado usando o seguinte comando:

$ openssl rand 80 > ticket.key

Dependendo do tamanho do arquivo, AES256 (para chaves de 80 bytes) ou AES128 (para chaves de 48 bytes) é usado para criptografia.

ssl_session_tickets#

Sintaxe

ssl_session_tickets on | off;

Padrão

ssl_session_tickets on;

Contexto

mail, server

Habilita ou desabilita a retomada de sessão através de tickets de sessão TLS.

ssl_session_timeout#

Sintaxe

ssl_session_timeout tempo;

Padrão

ssl_session_timeout 5m;

Contexto

mail, server

Especifica um tempo durante o qual um cliente pode reutilizar os parâmetros de sessão.

ssl_trusted_certificate#

Sintaxe

ssl_trusted_certificate arquivo;

Padrão

—

Contexto

mail, server

Especifica um arquivo com certificados CA confiáveis no formato PEM usado para verificar certificados de cliente.

Em contraste com o conjunto de certificados definido por ssl_client_certificate, a lista desses certificados não será enviada aos clientes.

ssl_verify_client#

Sintaxe

ssl_verify_client on | off | optional | optional_no_ca;

Padrão

ssl_verify_client off;

Contexto

mail, server

Habilita a verificação de certificados de cliente. O resultado da verificação é passado no cabeçalho Auth-SSL-Verify da requisição de autenticação. Se ocorrer um erro durante a verificação do certificado do cliente ou se um cliente não fornecer o certificado necessário, a conexão é fechada.

optional

solicita o certificado do cliente e o verifica se o certificado estiver presente

optional_no_ca

solicita o certificado do cliente mas não exige que ele seja assinado por um certificado de CA confiável. Isso é destinado para uso em casos quando um serviço externo ao Angie executa a verificação real do certificado. O conteúdo do certificado é acessível através de requisições enviadas para o servidor de autenticação.

ssl_verify_depth#

Sintaxe

ssl_verify_depth número;

Padrão

ssl_verify_depth 1;

Contexto

mail, server

Define a profundidade de verificação na cadeia de certificados do cliente.

starttls#

Sintaxe

starttls on | off | only;

Padrão

starttls off;

Contexto

mail, server

on

permite o uso do comando STLS para POP3 e do comando STARTTLS para IMAP e SMTP;

off

nega o uso dos comandos STLS e STARTTLS;

only

exige transição TLS preliminar.