Hace unos días actualicé mi Discourse desde una versión que no recuerdo con certeza, aunque creo firmemente (aunque no puedo asegurarlo al 100%) que era una beta de la 2.4, hasta la actual 2.4.0.beta4.
Recientemente noté que el envío de correos electrónicos ya no funciona; tengo muchos trabajos fallidos en Sidekiq. El error en todos esos trabajos es: “Jobs::HandledExceptionWrapper: Wrapped OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: unsupported protocol”.
Mis configuraciones de correo apuntan a un servidor de correo antiguo mío (que funciona perfectamente para todos los clientes, de distintos tipos), en el puerto 587 con autenticación simple y enable_starttls_auto establecido en true. Ha funcionado sin problemas desde que configuré Discourse a principios de este año, así que estoy bastante seguro de que dejó de funcionar tras las últimas actualizaciones. El sistema operativo no ha cambiado ni se ha actualizado durante este periodo, ni tampoco el servidor de correo.
He leído Discourse Version 2.4 y no veo nada relacionado con el correo o OpenSSL allí.
P1: ¿Dónde puedo ver desde qué versión se realizó la última actualización y la anterior, para poder rastrear las versiones que he utilizado?
P2: ¿Dónde puedo encontrar marcas de tiempo más específicas sobre cuándo comenzaron a fallar los trabajos de correo? Hice clic en un trabajo en Sidekiq y me indica que fue creado hace dos días, lo cual coincide con cuando realicé la actualización. Pero me gustaría verificar que los trabajos de correo no fallaron antes de eso.
P3: Presumiblemente, algo relacionado con OpenSSL cambió en la versión que empecé a usar (en comparación con la que tenía antes). ¿Qué podría haber sido? ¿Existe alguna configuración que pueda ajustar? ¿O debería intentar hacer un downgrade? ¿O hay alguna forma de obtener información adicional del procesamiento de trabajos para ver a qué protocolo se refiere el error?
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:/#
Estoy viendo un mensaje de error “protocolo no admitido” al forzar TLS distinto de 1.3 (usando argumentos adicionales para el comando openssl, véase más abajo), y “write:errno=0” solo al forzar TLS 1.3. Con su comando (sin forzar TLS) no veo ninguna versión específica siendo utilizada/intentada.
Si alguien pudiera responder las preguntas #1 y #2, sería de gran ayuda. Necesito evaluar si existe una forma de revertir esto lo antes posible y, para ello, debo saber cuál fue la última versión funcional.
Ahora tengo 3682 trabajos de correo electrónico fallidos en mi cola. Los correos de verificación de creación de cuenta no se están enviando, ni tampoco ningún otro.
Por favor, edita /var/discourse/launcher y reemplaza la versión de la imagen base (image="discourse/base:2.0.20190906-0522") en la línea 91 con image="discourse/base:2.0.20190625-0946"
Después, reconstruye el contenedor y ejecuta los comandos que ejecutaste en E-mail sending not working after upgrade - #4 by rawtaz. TLS 1.3 no funcionará, pero ¿es similar la salida de los otros comandos? Si no lo es, ¿qué es diferente?
¿Podrías enviarme por mensaje privado el nombre del host del SMTP en caso de que esté disponible públicamente?
¡Gracias @gerhard! Tu sugerencia resolvió el problema. Cambié la versión de la imagen base, reconstruí y, de inmediato, el foro comenzó a enviar los correos electrónicos en cola (unos 10k :D).
Ejecuté los comandos nuevamente dentro del contenedor y obtuve otra salida (exitosa). Esta salida contiene certificados y un montón de otra información, así que, a menos que realmente la necesites, prefiero no pegarla aquí. Avísame si esto es un problema y realmente la necesitas.
Te enviaré por mensaje privado el nombre de host del servidor de correo para que puedas depurar este problema con más detalle; por favor, mantenlo en secreto ¡Gracias!
Edición: Estoy marcando tu último mensaje como solución porque resolvió el problema. Sin embargo, obviamente necesitamos identificar qué está causando esto en la imagen base más reciente, para que se pueda actualizar en el futuro.
Como solución temporal, deberías poder agregar comandos sed a la sección run al final de app.yml para eliminar las siguientes dos configuraciones del archivo /etc/ssl/openssl.cnf.