Há alguns dias, atualizei meu Discourse de uma versão que não sei exatamente qual era, embora eu acredite firmemente (mas não posso afirmar com certeza) que era uma beta 2.4, para a atual 2.4.0.beta4.
Recentemente, notei que o envio de e-mails parou de funcionar; tenho muitos jobs falhos no Sidekiq. O erro em todos esses jobs é: “Jobs::HandledExceptionWrapper: Wrapped OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: unsupported protocol”.
Minhas configurações de e-mail apontam para um servidor de e-mail antigo meu (que, de resto, funciona bem para todos os clientes, de diversos tipos), na porta 587, com autenticação simples e enable_starttls_auto definido como true. Tudo funcionou perfeitamente desde que configurei o Discourse no início deste ano, então tenho quase certeza de que o problema começou após as últimas atualizações. O sistema operacional não foi alterado/atualizado durante esse período, nem o servidor de e-mail.
P1: Onde posso verificar a partir de qual versão a última atualização e a anterior foram feitas, para que eu possa rastrear as versões que utilizei?
P2: Onde posso encontrar carimbos de data/hora mais específicos para quando os jobs de e-mail começaram a falhar? Cliquei em um job no Sidekiq e ele informa que foi criado há dois dias, o que acredito estar alinhado com o momento em que fiz a atualização. Mas gostaria de verificar se os jobs de e-mail não falharam antes disso.
P3: Provavelmente algo relacionado ao OpenSSL mudou na versão que comecei a executar (em relação à versão anterior). O que poderia ter sido isso, e existe alguma configuração que eu possa ajustar? Ou devo tentar fazer o downgrade? Ou há alguma maneira de obter mais informações sobre o processamento do job para ver qual protocolo está causando o problema?
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp
CONNECTED(00000003)
139861698753664:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1922:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 320 bytes and written 353 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
root@foo-app:/#
root@foo-app:/#
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp -tls1_1
CONNECTED(00000003)
140427988595840:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1922:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 320 bytes and written 174 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.1
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1568985038
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
---
root@foo-app:/#
root@foo-app:/#
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp -tls1_2
CONNECTED(00000003)
140184139936896:error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol:../ssl/statem/statem_lib.c:1922:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 320 bytes and written 258 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1568985044
Timeout : 7200 (sec)
Verify return code: 0 (ok)
Extended master secret: no
---
root@foo-app:/#
root@foo-app:/#
root@foo-app:/# openssl s_client -connect mail.foo.com:587 -starttls smtp -tls1_3
CONNECTED(00000003)
write:errno=0
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 262 bytes and written 278 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
root@foo-app:/#
Estou recebendo uma mensagem de erro “protocolo não suportado” ao forçar TLS diferente da versão 1.3 (usando argumentos adicionais no comando openssl, veja abaixo), e “write:errno=0” apenas ao forçar TLS 1.3. Com o seu comando (sem forçar TLS), não estou vendo nenhuma versão específica sendo usada ou tentada.
Se alguém puder responder às perguntas #1 e #2, seria muito útil. Preciso avaliar se há uma maneira de reverter para uma versão anterior o mais rápido possível e, para isso, preciso saber qual foi a última versão que funcionava corretamente.
Edite /var/discourse/launcher e substitua a versão da imagem base (image="discourse/base:2.0.20190906-0522") na linha 91 por image="discourse/base:2.0.20190625-0946"
Reconstrua o container em seguida e execute os comandos que você rodou em E-mail sending not working after upgrade - #4 by rawtaz. O TLS 1.3 não funcionará, mas a saída dos outros comandos é semelhante? Se não, o que é diferente?
Você poderia me enviar por mensagem privada o hostname do SMTP, caso esteja publicamente disponível?
Obrigado @gerhard! Sua sugestão resolveu o problema. Alterei a versão da imagem base, reconstruí e, imediatamente, o fórum começou a enviar os e-mails em fila (cerca de 10 mil :D).
Executei os comandos novamente no contêiner e obtive outras saídas (bem-sucedidas). Essa saída contém certificados e um monte de outras coisas, então, a menos que você realmente precise, prefiro não colá-la aqui. Me avise se isso for um problema e se você realmente precisar dela.
Vou te enviar por mensagem privada o nome do servidor de e-mail para que você possa depurar esse problema com mais detalhes — por favor, mantenha isso em segredo Obrigado!
Edição: Estou marcando sua última resposta como solução porque ela resolveu o problema. No entanto, obviamente precisamos identificar o que está causando isso na imagem base mais recente, para que seja possível atualizar no futuro.
Sim, permanecer na imagem antiga não é uma solução de longo prazo. Essa imagem, essencialmente, não tem mais suporte e as coisas podem começar a falhar…
Este problema é semelhante ao Email SSL Errors after Update to 2.4.0.beta4. Sugiro que você atualize seu SMTP para usar TLSv1.2 e um tamanho de chave DH de pelo menos 2048 bits.
Como solução alternativa, você deve poder adicionar comandos sed à seção run no final do app.yml para remover as seguintes duas configurações do arquivo /etc/ssl/openssl.cnf.