Let's Encrypt começou a emitir certificados ECC por padrão desde o Certbot 2.0 . Isso não é um problema para navegadores modernos, mas os certificados Let's Encrypt também podem ser usados para outros fins além de HTTPS. Ou seja, alguns servidores SMTP ainda não suportam certificados ECC. Se esse servidor tentar estabelecer STARTTLS
conexão com o Postfix que usa certificados ECC, ele falhará.
Os logs indicam que não há cifra compartilhada, apesar de, por exemplo, o Wireshark mostrar que o Client Hello no handshake TLS possui claramente cifras comuns com a lista configurada via smtpd_tls_mandatory_ciphers = medium
.
postfix/smtpd[1337]: connect from mail.example.net[198.51.100.1]
postfix/smtpd[1337]: SSL_accept error from mail.example.net[198.51.100.1]: -1
postfix/smtpd[1337]: warning: TLS library problem: error:0A0000C1:SSL routines::no shared cipher:../ssl/statem/statem_srvr.c:2220:
postfix/smtpd[1337]: lost connection after STARTTLS from mail.example.net[198.51.100.1]
postfix/smtpd[1337]: disconnect from mail.example.net[198.51.100.1] ehlo=1 starttls=0/1 commands=1/2
O problema é causado pelo tipo de certificado. É possível obter certificados ECC e RSA do Let's Encrypt usando Certbot? Como configurar o Postfix para usar os dois ao mesmo tempo?
Certificado RSA adicional da Let's Encrypt (Certbot)
Existem algumas respostas com soluções que requerem scripts personalizados. Esta solução depende inteiramente da configuração do Certbot. As seguintes suposições são feitas. Se isso for diferente em sua configuração, altere as instruções de acordo com suas necessidades.
Existe um certificado ECC configurado para
mail.example.com
usá-lo como nome do certificado (--cert-name
); renovação configurada em/etc/letsencrypt/renewal/mail.example.com.conf
etc.Os padrões do Certbot são configurados por meio do arquivo de configuração
/etc/letsencrypt/cli.ini
. Este exemplo usa certificados ECC com umasecp384r1
curva mais forte (defaultsecp256r1
) e tamanho de chave RSA aumentado4096
(default2048
), bem como um autenticador pré-configurado :Você pode replicar o
cli.ini
arquivo com o tipo de chave RSA usando:A configuração principal é
key-type = rsa
. O arquivo é replicado para que isso não altere a configuração padrão de todos os novos certificados. Neste exemplo, o comando criacli-rsa.ini
tendo:Você pode usar o arquivo de configuração para solicitar outro certificado para o arquivo
mail.example.com
. Deve--cert-name
ser diferente do certificado ECC, pois estamos solicitando um certificado RSA adicional em vez de substituir o atual. Por exemplo,Se o seu método de renovação estiver configurado corretamente, você deverá obter:
Você precisará desses caminhos na configuração do Postfix.
Vários certificados no Postfix
Com o suporte Postfix TLS você pode configurar vários certificados ao mesmo tempo. Desde o Postfix 3.4 é recomendado usar o
smtpd_tls_chain_files
parâmetro (em vez do legadosmtpd_tls_cert_file
&smtpd_tls_key_file
para RSA &smtpd_tls_eccert_file
&smtpd_tls_eckey_file
para ECDSA).Vale a pena notar que:
No entanto,
--deploy-hook
um script que seja executadosystemctl reload postfix
em uma renovação bem-sucedida.Exemplo de configuração para o
main.cf
; preste atenção na ordem correta: cada chave privada antes de cada cadeia de certificados: