
Desde a nova atualização do Debian Buster, tenho alguns problemas com o TLSv1.3.
Problema: meu cliente de e-mail iOS não conseguiu se conectar ao meu servidor de e-mail (12.2) e não quero atualizar agora, então tento encontrar uma maneira de desabilitar o TLSv1.3 com o dovecot.
As versões atuais são: OpenSSL 1.1.1c e Dovecot 2.3.4.1
No Dovecot 2.3, as configurações de SSL foram alteradas de ssl_protocols para ssl_min_protocol.
# Minimum SSL protocol version to use. Potentially recognized values are SSLv3,
# TLSv1, TLSv1.1, and TLSv1.2, depending on the OpenSSL version used.
Mas eu gostaria de forçar o Dovecot a usar o TLSv1.2 em vez de usar um protocolo SSL mínimo, porque o Dovecot tentará primeiro antes do protocolo SSL mais alto disponível (TLSv1.3). Se eu definir o TLSv1.3, ele não usará o TLSv1.2.
Então, alguém sabe como forçar o Dovecot 2.3.4.1 a usar o TLSv1.2?
Responder1
Não é uma resposta completa, mas talvez parte de uma solução:
1. Tentei a solução sugerida por @joffrey, mas não consegui fazê-la funcionar. Ativar ou desativar conjuntos de criptografia TLSv1.3 ssl_cipher_list
parece ser completamente ignorado pelo Dovecot 2.3.4.1. O
ssl_prefer_server_ciphers
também não tem nenhum efeito no TLSv1.3. Não importa quais configurações do Dovecot eu tentei, não consegui impedir que um cliente negociasse o TLSv1.3 e escolhesse qualquer conjunto de criptografia TLSv1.3 desejado.
Isso provavelmente está relacionado à introdução no OpenSSL 1.1.1 de um novo método para selecionar conjuntos de cifras TLSv1.3, além do método já existente para selecionar cifras para TLSv1.2 e inferiores. Os desenvolvedores do OpenSSL estavam cientes da inconveniência que isso causaria, mas disseram que era inevitável, veja
https://github.com/openssl/openssl/pull/5392. Comprometimento do pombal
8f6f04eb
parece lançar as bases para uma nova opção Dovecot provavelmente a ser nomeada ssl_ciphersuites
como front-end para o novo método OpenSSL para TLSv1.3, também além do existente ssl_cipher_list
para TLSv1.2 e abaixo. Este commit foi incluído pela primeira vez no Dovecot 2.3.9, mas essa versão ainda não foi empacotada para o Debian. Além disso, não vejo a opção mencionada no Dovecot
NOTÍCIASou documentação on-line, então talvez ainda não tenham terminado.
2. Como alternativa, descobri que adicionar MaxProtocol = TLSv1.2
funciona
/etc/ssl/openssl.cnf
(aviso: isso também mudará o comportamento de muitos outros programas que usam OpenSSL!):
[system_default_sect]
MinProtocol = TLSv1.2
MaxProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=2
Isso impede imediatamente que o Dovecot 2.3.4.1 negocie o TLSv1.3. Não há necessidade nem de reiniciá-lo. Mas, como avisado acima, esta solução também afeta outras aplicações, não apenas o Dovecot, por isso é de uso limitado.
Na tentativa de direcionar as configurações exclusivamente para o Dovecot, tentei definir uma variável de ambiente para apontar para um arquivo de configuração específico:
# OPENSSL_CONF=/etc/ssl/openssl-max-tlsv12.cnf dovecot -F
Mas isso não teve nenhum efeito no Dovecot. Verifiquei se a variável estava visível no ambiente e se funcionava para outras aplicações OpenSSL. No entanto, suspeito que a própria biblioteca OpenSSL não analisa variáveis de ambiente e que é considerado responsabilidade do programa chamador (Dovecot) passar de alguma forma o conteúdo da variável para a biblioteca. Duvido que o Dovecot faça isso, porque não vejo nenhum uso da biblioteca OpenSSL CONF no código-fonte do Dovecot. Também não consegui fazer com que uma seção do aplicativo dovecot no arquivo de configuração do OpenSSL funcionasse, nem encontrei nenhuma opção do Dovecot para definir um local do arquivo de configuração do OpenSSL ou o nome da seção do aplicativo a ser usado no arquivo de configuração do OpenSSL. Talvez alguém saiba como direcionar as configurações do OpenSSL para um programa específico, em vez de para todo o sistema?
3. Finalmente, você sempre pode tentar editar o código-fonte, é claro. Para o pacote Debian dovecot atual, você pode começar duplicando
está linha, mude SSL_CTX_set_min_proto_version
para
SSL_CTX_set_max_proto_version
e recompile. Eu realmente não queria ir tão longe. Você também pode começar a usar o upstream diretamente em vez do pacote de distribuição.
Responder2
Primeiro, você deve localizar o arquivo 10-ssl.conf (geralmente em /etc/dovecot/conf.d/).
Edite e vá para a linha que contémprotocolosssl_protocols(o meu é a linha 52). Nessa linha você também pode negar protocolos. Podes tentar
ssl_protocols = TLSv1.2 !TLSv1.3
Responder3
Eu não tentei ou reproduzi, mas você pode tentar definir ossl_min_protolpara TLSv1.2 e definirssl_cipher_listpara não incluir nenhumcifras TLS1.3 específicas.
Responder4
Você pode usar este trecho de configuração, colocado em local.conf ou conf.d/10-ssl.conf
# doveconf -n | grep -iE "tls|ssl"
ssl = required
ssl_ca = </path/to/ca/bundle.pem
ssl_cert = </path/to/cert.pem
ssl_cipher_list = ALL:!RSA:!CAMELLIA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SHA1:!SHA256:!SHA384:!LOW@STRENGTH
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes