Fix lỗi STARTTLS: “didn’t find starttls in server response”
Khi triển khai SMTP/IMAP/POP3 với TLS, một lỗi phổ biến là:
didn't find starttls in server response
Lỗi này xảy ra khi client gửi lệnh STARTTLS, nhưng server không quảng bá khả năng STARTTLS trong banner. Kết quả: kết nối không thể nâng cấp sang TLS, gây gián đoạn dịch vụ hoặc cảnh báo “Insecure connection”.
Bối cảnh
- STARTTLS là cơ chế upgrade từ plain connection → TLS trên port chuẩn (SMTP 25/587, IMAP 143, POP3 110).
- Nếu server chưa bật TLS, khi client gửi EHLO sẽ không thấy STARTTLS trong response.
- Nguyên nhân thường gặp:
- Mail server (Postfix, Dovecot, Exchange, Sendmail…) chưa bật TLS.
- Chứng chỉ không hợp lệ hoặc chưa khai báo trong cấu hình.
- Client buộc dùng STARTTLS trong khi server chỉ hỗ trợ SMTPS (465) hoặc IMAPS (993).
Fix trên Postfix / Dovecot
Trong main.cf (Postfix):
# Cho phép TLS nếu client hỗ trợ
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
# Chỉ định cert và key
smtpd_tls_cert_file = /etc/ssl/certs/mail.pem
smtpd_tls_key_file = /etc/ssl/private/mail.key
smtpd_tls_CAfile = /etc/ssl/certs/ca.pem
Trong 10-ssl.conf (Dovecot):
ssl = required
ssl_cert = </etc/ssl/certs/mail.pem
ssl_key = </etc/ssl/private/mail.key
Sau đó restart dịch vụ:
systemctl restart postfix dovecot
Fix trên Microsoft Exchange
- Kiểm tra Receive Connector đã bật TLS chưa:
Get-ReceiveConnector | fl Name, TlsDomainCapabilities
- Nếu chưa, chỉnh FQDN và bật TLS:
Set-ReceiveConnector "Default Frontend EXCHANGE1" -Fqdn mail.example.com
Set-ReceiveConnector "Default Frontend EXCHANGE1" -TlsDomainCapabilities mail.example.com:AcceptOorgProtocol
- Đảm bảo chứng chỉ SSL đúng (SAN/Wildcard) và gán cho dịch vụ:
Enable-ExchangeCertificate -Thumbprint <CertThumb> -Services SMTP,IMAP,POP
Best Practices
- Dùng STARTTLS thay vì SSL cứng port (SMTPS 465, IMAPS 993, POP3S 995) để linh hoạt hơn.
- Chứng chỉ SSL: dùng từ CA uy tín, SHA256, RSA ≥ 2048 hoặc ECC P-256.
- Policy:
- Với mail nội bộ: smtpd_tls_security_level = may.
- Với internet-facing: smtpd_tls_security_level = encrypt để bắt buộc TLS.
- Kiểm tra bằng OpenSSL:
openssl s_client -connect mail.example.com:587 -starttls smtp
Nếu server trả về 250-STARTTLS trong EHLO → đã fix thành công.
Kết luận
Lỗi “didn’t find starttls in server response” thường do server chưa bật hoặc chưa cấu hình đúng TLS.
- Với Postfix/Dovecot: bật smtpd_tls_security_level, khai báo cert.
- Với Exchange: cấu hình lại Receive Connector + gán chứng chỉ đúng.
Sau khi fix, luôn test lại bằng OpenSSL hoặc công cụ kiểm tra mail server để đảm bảo STARTTLS hoạt động chuẩn.


