Qualche giorno fa ho aggiornato Discourse da una versione di cui non ricordo il numero (anche se sono quasi certo, ma non ne sono sicuro al 100%, che fosse una beta della 2.4) alla versione attuale 2.4.0.beta4.
Recentemente ho notato che l’invio delle email non funziona più: ci sono molti job falliti in Sidekiq. L’errore per tutti questi job è: “Jobs::HandledExceptionWrapper: Wrapped OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: unsupported protocol”.
Le mie impostazioni per le email puntano a un vecchio server di posta mio (che comunque funziona perfettamente per tutti i client, di ogni tipo), sulla porta 587 con autenticazione plain e enable_starttls_auto impostato su true. Ha funzionato senza problemi da quando ho configurato Discourse all’inizio di quest’anno, quindi sono abbastanza sicuro che il problema sia iniziato dopo gli ultimi aggiornamenti. Il sistema operativo non è stato modificato o aggiornato in questo periodo, né il server di posta.
Ho letto Discourse Version 2.4 e non ho trovato nulla relativo alle email o a OpenSSL.
D1: Da dove posso capire da quale versione è stato fatto l’ultimo aggiornamento e quello precedente, così da poter tracciare le versioni che ho utilizzato?
D2: Dove posso trovare timestamp più precisi su quando i job di invio email hanno iniziato a fallire? Ho cliccato su un job in Sidekiq e mi dice che è stato creato due giorni fa, il che mi sembra coerente con il momento in cui ho eseguito l’aggiornamento. Ma vorrei verificare che i job di invio email non abbiano fallito prima di allora.
D3: Presumibilmente qualcosa relativo a OpenSSL è cambiato nella versione che sto eseguendo (rispetto a quella che avevo prima). Cosa potrebbe essere stato e c’è qualche impostazione che posso modificare? Oppure dovrei provare a fare un downgrade? O esiste un modo per ottenere ulteriori informazioni dall’elaborazione dei job, così da capire quale protocollo sta dando problemi?
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:/#
Sto ricevendo un messaggio di errore “protocollo non supportato” quando imposto forzatamente TLS diverso dalla versione 1.3 (utilizzando argomenti aggiuntivi per il comando openssl, vedi sotto), e “write:errno=0” solo quando imposto forzatamente TLS 1.3. Con il tuo comando (senza forzare TLS) non vedo alcuna versione specifica utilizzata o tentata.
Se qualcuno potesse rispondere alle domande 1 e 2, sarebbe molto utile. Devo valutare se esiste un modo per eseguire il downgrade il prima possibile e, per farlo, devo sapere qual era l’ultima versione funzionante.
Modifica /var/discourse/launcher e sostituisci la versione dell’immagine di base (image="discourse/base:2.0.20190906-0522") alla riga 91 con image="discourse/base:2.0.20190625-0946"
Ricostruisci il contenitore e successivamente esegui i comandi che hai eseguito su E-mail sending not working after upgrade - #4 by rawtaz. TLS 1.3 non funzionerà, ma l’output degli altri comandi è simile? In caso contrario, cosa è diverso?
Potresti inviarmi in privato il nome host del server SMTP, nel caso sia pubblicamente disponibile?
Grazie @gerhard! Il tuo suggerimento ha risolto il problema. Ho modificato la versione dell’immagine di base, ricostruito e immediatamente il forum ha iniziato a inviare le e-mail in coda (circa 10k :D).
Ho eseguito nuovamente i comandi nel container e ho ottenuto un’altra output (con esito positivo). Questa output contiene certificati e un sacco di altre cose, quindi a meno che tu non ne abbia davvero bisogno, preferirei non incollarla qui. Fammi sapere se questo è un problema e se ne hai davvero bisogno.
Ti invierò in privato il nome host del server di posta in modo che tu possa analizzare questo problema in modo più dettagliato - ti chiedo di mantenerlo riservato Grazie!
Modifica: Segno il tuo ultimo post come soluzione perché ha risolto il problema. Ovviamente, però, dobbiamo identificare cosa sta causando il problema nella nuova immagine di base, in modo da poterla aggiornare in futuro.
Sì, rimanere sulla vecchia immagine non è una soluzione a lungo termine. Quell’immagine è sostanzialmente non supportata e le cose potrebbero iniziare a non funzionare…
Come soluzione temporanea, dovresti poter aggiungere comandi sed alla sezione run alla fine di app.yml per rimuovere le seguenti due impostazioni dal file /etc/ssl/openssl.cnf.