Risoluzione dei problemi
Perché ricevo errori TLS quando mi collego all’SMTP?
Risolvi gli errori di handshake SSL e TLS con smtp.emailit.com, come «wrong version number», nomi del certificato non corrispondenti ed errori STARTTLS.
Questo articolo tratta gli errori che si verificano mentre il client e l’SMTP relay di Emailit configurano la cifratura. Quasi sempre derivano da una mancata corrispondenza tra la porta e la modalità TLS impostata nel client.
Sintomi
SSL routines:ssl3_get_record:wrong version numberoERR_SSL_WRONG_VERSION_NUMBERHostname/IP does not match certificate's altnamesocertificate verify failedSTARTTLS failed,Greeting never receivedoppure la connessione si blocca dopo essersi apertaunsupported protocolono protocols available
Causa
Emailit usa due modalità TLS, e ogni porta ne prevede una:
| Porta | Modalità | Impostazione tipica del client |
|---|---|---|
| 587, 2525, 2587, 25 | STARTTLS: la sessione parte in chiaro e poi passa alla cifratura | Nodemailer secure: false, PHPMailer ENCRYPTION_STARTTLS, «TLS» nella maggior parte delle interfacce |
| 465 | TLS implicito: cifrata fin dal primo byte | Nodemailer secure: true, PHPMailer ENCRYPTION_SMTPS, «SSL» nella maggior parte delle interfacce |
Le cause più comuni sono:
- TLS implicito su una porta STARTTLS, ad esempio
secure: truecon la porta 587. Il client si aspetta un handshake TLS ma riceve un saluto in chiaro, e ne risulta «wrong version number». - STARTTLS sulla porta 465. Il client attende un saluto che il server non invia mai in chiaro, quindi la connessione si blocca.
- Connessione tramite indirizzo IP o tramite un tuo CNAME. Il certificato è emesso per
smtp.emailit.com, quindi qualsiasi altro nome host non supera la verifica. - Uno stack TLS datato. Il relay negozia TLS 1.2 o TLS 1.3. I client limitati a TLS 1.0 o 1.1, o con un bundle di CA obsoleto, non riescono a completare l’handshake.
- Ispezione del traffico. Alcuni antivirus e proxy aziendali intercettano l’SMTP e presentano un proprio certificato.
Soluzione
-
Abbina la porta alla modalità. Usa la porta
587con STARTTLS, oppure la porta465con TLS implicito. Non mescolarle.const transporter = nodemailer.createTransport({ host: 'smtp.emailit.com', port: 587, secure: false, // STARTTLS on 587; set true only for port 465 requireTLS: true, // refuse to send if the upgrade fails auth: { user: 'emailit', pass: process.env.EMAILIT_API_KEY }, }); -
Usa il nome host esatto. Imposta l’host su
smtp.emailit.com. Non usare un indirizzo IP o un alias. -
Richiedi la cifratura nel client. STARTTLS è offerto su ogni porta in chiaro, ma il relay non lo impone. Attiva l’opzione «require TLS» del client, così le credenziali non vengono mai inviate senza cifratura.
-
Prova l’handshake dalla macchina che invia.
openssl s_client -starttls smtp -connect smtp.emailit.com:587 -servername smtp.emailit.com openssl s_client -connect smtp.emailit.com:465 -servername smtp.emailit.comUn risultato corretto mostra
subject=CN=smtp.emailit.comeVerify return code: 0 (ok). Un subject diverso significa che qualcosa nella tua rete sta intercettando la connessione. -
Aggiorna i runtime datati. Se il client non riesce a negoziare TLS 1.2, aggiorna il runtime del linguaggio o OpenSSL e i certificati CA di sistema.
Se l’handshake riesce ma l’accesso no, vedi Perché l’SMTP restituisce 535 Authentication failed?. Se non riesci proprio a collegarti, vedi Perché la connessione SMTP va in timeout?.
Serve ancora aiuto?
Contatta il supporto o chiedi su Discord. Indica la porta, la libreria client e la sua versione, e l’output del comando openssl s_client.