Fehlerbehebung
Warum erhalte ich TLS-Fehler beim Verbinden mit SMTP?
Beheben Sie SSL- und TLS-Handshake-Fehler mit smtp.emailit.com, etwa „wrong version number“, nicht passende Zertifikatsnamen und STARTTLS-Fehler.
Dieser Artikel behandelt Fehler, die auftreten, während Ihr Client und das SMTP-Relay von Emailit die Verschlüsselung aufbauen. Sie entstehen fast immer dadurch, dass Port und TLS-Modus in Ihrem Client nicht zusammenpassen.
Symptome
SSL routines:ssl3_get_record:wrong version numberoderERR_SSL_WRONG_VERSION_NUMBERHostname/IP does not match certificate's altnamesodercertificate verify failedSTARTTLS failed,Greeting never receivedoder die Verbindung hängt nach dem Verbindungsaufbauunsupported protocoloderno protocols available
Ursache
Emailit verwendet zwei TLS-Modi, und jeder Port erwartet einen davon:
| Port | Modus | Typische Client-Einstellung |
|---|---|---|
| 587, 2525, 2587, 25 | STARTTLS: Die Sitzung beginnt im Klartext und wird dann auf TLS umgestellt | Nodemailer secure: false, PHPMailer ENCRYPTION_STARTTLS, „TLS“ in den meisten Oberflächen |
| 465 | Implizites TLS: verschlüsselt ab dem ersten Byte | Nodemailer secure: true, PHPMailer ENCRYPTION_SMTPS, „SSL“ in den meisten Oberflächen |
Die häufigsten Ursachen sind:
- Implizites TLS auf einem STARTTLS-Port, zum Beispiel
secure: truemit Port 587. Der Client erwartet einen TLS-Handshake, erhält aber eine Begrüßung im Klartext, was zu „wrong version number“ führt. - STARTTLS auf Port 465. Der Client wartet auf eine Begrüßung, die der Server nie im Klartext sendet, sodass die Verbindung hängt.
- Verbindung per IP-Adresse oder über Ihren eigenen CNAME. Das Zertifikat ist für
smtp.emailit.comausgestellt, daher schlägt die Verifizierung bei jedem anderen Hostnamen fehl. - Ein alter TLS-Stack. Das Relay handelt TLS 1.2 oder TLS 1.3 aus. Clients, die auf TLS 1.0 oder 1.1 beschränkt sind oder ein veraltetes CA-Bundle haben, können den Handshake nicht abschließen.
- Prüfung des Datenverkehrs. Manche Antivirenprogramme und Unternehmens-Proxys fangen SMTP ab und präsentieren ein eigenes Zertifikat.
Lösung
-
Port und Modus abstimmen. Verwenden Sie Port
587mit STARTTLS oder Port465mit implizitem TLS. Mischen Sie sie nicht.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 }, }); -
Genauen Hostnamen verwenden. Setzen Sie den Host auf
smtp.emailit.com. Verwenden Sie keine IP-Adresse und keinen Alias. -
Verschlüsselung im Client erzwingen. STARTTLS wird auf jedem Klartext-Port angeboten, aber das Relay erzwingt es nicht. Aktivieren Sie die Option „require TLS“ Ihres Clients, damit Zugangsdaten nie unverschlüsselt gesendet werden.
-
Handshake von der sendenden Maschine aus testen.
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.comEin fehlerfreies Ergebnis zeigt
subject=CN=smtp.emailit.comundVerify return code: 0 (ok). Steht dort ein anderer Name, fängt etwas in Ihrem Netzwerk die Verbindung ab. -
Alte Laufzeitumgebungen aktualisieren. Aktualisieren Sie die Laufzeitumgebung der Sprache oder OpenSSL und die CA-Zertifikate des Systems, wenn Ihr Client TLS 1.2 nicht aushandeln kann.
Wenn der Handshake gelingt, die Anmeldung aber fehlschlägt, siehe Warum gibt SMTP 535 Authentication failed zurück?. Wenn Sie überhaupt keine Verbindung herstellen können, siehe Warum läuft meine SMTP-Verbindung in eine Zeitüberschreitung?.
Weiterhin Probleme?
Kontaktieren Sie den Support oder fragen Sie auf Discord. Geben Sie den Port, Ihre Client-Bibliothek und deren Version sowie die Ausgabe des Befehls openssl s_client an.