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 upgrades 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, este módulo não é compilado por padrão; ele deve ser habilitado com a ‑‑with‑mail_ssl_module opção de compilação.

Em pacotes e imagens dos 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 é recomendado

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;

Padrão

Contexto

mail, server

Especifica um arquivo com o certificado no formato PEM para o servidor especificado. Se certificados intermediários devem ser especificados além de um certificado primário, eles devem ser especificados no mesmo arquivo na seguinte ordem: o certificado primário vem primeiro, depois os certificados intermediários. Uma chave secreta no formato PEM pode ser colocada no mesmo 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;

#    ...
}

Apenas OpenSSL 1.0.2 ou superior suporta cadeias de certificados separadas para diferentes certificados. Com versões mais antigas, apenas uma cadeia de certificados pode ser usada.

O valor data:`certificate` pode ser especificado em vez do file, que carrega um certificado sem usar arquivos intermediários.

Note que o uso inadequado desta sintaxe pode ter implicações de segurança, como escrever dados de chave secreta no log de erro.

ssl_certificate_key#

Sintaxe

ssl_certificate_key file;

Padrão

Contexto

mail, server

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

O valor engine:`name`:id pode ser especificado em vez do file, que carrega uma chave secreta com um id especificado do engine OpenSSL name.

O valor data:`key` pode ser especificado em vez do file, que carrega uma chave secreta sem usar arquivos intermediários. Note que o uso inadequado desta sintaxe pode ter implicações de segurança, como escrever dados de chave secreta no log de erro.

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

A diretiva ssl_ciphers não configura cifras para TLS 1.3 ao usar OpenSSL. Para ajustar cifras TLS 1.3 com OpenSSL, use a diretiva ssl_conf_command, que foi adicionada para suportar configuração SSL avançada.

  • 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. Para configurar cifras TLS 1.3 com OpenSSL, use o comando ciphersuites.

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 curva;

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 arquivo;

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

Alterado na versão 1.2.0: Parâmetro TLSv1.3 adicionado ao conjunto padrão.

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 number;

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.