Řešení problémů
Proč při připojení k SMTP dostávám chyby TLS?
Opravte chyby handshaku SSL a TLS se smtp.emailit.com, například „wrong version number“, nesoulad názvu v certifikátu a selhání STARTTLS.
Tento článek se zabývá chybami, ke kterým dochází, když váš klient a SMTP relay Emailitu navazují šifrování. Téměř vždy je způsobuje nesoulad mezi portem a režimem TLS ve vašem klientovi.
Příznaky
SSL routines:ssl3_get_record:wrong version numberneboERR_SSL_WRONG_VERSION_NUMBERHostname/IP does not match certificate's altnamesnebocertificate verify failedSTARTTLS failed,Greeting never receivednebo se spojení po připojení zasekneunsupported protocolnebono protocols available
Příčina
Emailit používá dva režimy TLS a každý port očekává jeden z nich:
| Port | Režim | Typické nastavení klienta |
|---|---|---|
| 587, 2525, 2587, 25 | STARTTLS: relace začíná v prostém textu a pak se přepne na šifrovanou | Nodemailer secure: false, PHPMailer ENCRYPTION_STARTTLS, „TLS“ ve většině rozhraní |
| 465 | Implicitní TLS: šifrováno od prvního bajtu | Nodemailer secure: true, PHPMailer ENCRYPTION_SMTPS, „SSL“ ve většině rozhraní |
Časté příčiny jsou:
- Implicitní TLS na portu pro STARTTLS, například
secure: trues portem 587. Klient očekává handshake TLS, ale dostane uvítání v prostém textu, a výsledkem je „wrong version number“. - STARTTLS na portu 465. Klient čeká na uvítání, které server v nešifrované podobě nikdy nepošle, takže se spojení zasekne.
- Připojení přes IP adresu nebo přes vlastní CNAME. Certifikát je vystavený pro
smtp.emailit.com, takže jakýkoli jiný název hostitele ověřením neprojde. - Stará implementace TLS. Relay vyjednává TLS 1.2 nebo TLS 1.3. Klienti omezení na TLS 1.0 nebo 1.1 nebo se zastaralou sadou certifikátů CA handshake nedokončí.
- Kontrola provozu. Některé antiviry a firemní proxy zachytávají SMTP a předkládají vlastní certifikát.
Řešení
-
Sladťe port s režimem. Použijte port
587se STARTTLS, nebo port465s implicitním TLS. Nekombinujte je.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 }, }); -
Použijte přesný název hostitele. Nastavte hostitele na
smtp.emailit.com. Nepoužívejte IP adresu ani alias. -
Vyžadujte v klientovi šifrování. STARTTLS se nabízí na každém portu s prostým textem, ale relay ho nevynucuje. Zapněte v klientovi volbu „require TLS“, aby se přístupové údaje nikdy neposílaly nešifrovaně.
-
Otestujte handshake ze stroje, který odesílá.
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.comSprávný výsledek ukazuje
subject=CN=smtp.emailit.comaVerify return code: 0 (ok). Jiný subjekt znamená, že spojení ve vaší síti něco zachytává. -
Aktualizujte staré běhové prostředí. Pokud váš klient nedokáže vyjednat TLS 1.2, aktualizujte běhové prostředí jazyka nebo OpenSSL a systémové certifikáty CA.
Pokud handshake uspěje, ale přihlášení selže, přečtěte si článek Proč SMTP vrací 535 Authentication failed? Pokud se nemůžete připojit vůbec, přečtěte si článek Proč vyprší časový limit připojení k SMTP?
Stále si nevíte rady?
Napište podpoře nebo se zeptejte na Discordu. Uveďte port, klientskou knihovnu a její verzi a výstup příkazu openssl s_client.