← RFC Reference

RFC 8314: Văn bản thường được coi là lỗi thời

Standards Track Transport Security Published March 2026
ELI5: Trong nhiều năm, các ứng dụng email kết nối tới máy chủ trên cổng cleartext, sau đó yêu cầu "nâng cấp" lên mã hóa (STARTTLS). Điều đó giống như bắt đầu một cuộc gọi điện thoại trên loa ngoài trong một căn phòng đông đúc, rồi thì thầm "hãy chuyển sang một đường riêng tư." RFC 8314 nói: chỉ cần bắt đầu trên đường riêng tư. Kết nối với TLS từ byte đầu tiên — không có bước nâng cấp, không có cửa sổ để nghe lén.

Tại Sao Điều Này Tồn Tại

Email trong lịch sử đã sử dụng ba cổng cleartext cho giao tiếp client-to-server:

Cổng Giao Thức Mục Đích
25 SMTP Chuyển tiếp server-to-server
143 IMAP Truy cập hộp thư
110 POP3 Truy cập hộp thư
587 Submission Gửi thư client

Cả bốn đều bắt đầu dưới dạng kết nối cleartext. STARTTLS được bổ sung để nâng cấp những kết nối này thành TLS mid-stream. Nhưng STARTTLS có những điểm yếu hệ thống:

RFC 8314 tuyên bố những kết nối cleartext này lỗi thời cho việc gửi email và truy cập hộp thư, và bắt buộc sử dụng TLS ẩn làm giải pháp thay thế.

Cách Hoạt Động

TLS Ẩn so với STARTTLS

STARTTLS (cách cũ): Kết nối trên cổng cleartext, trao đổi lời chào dưới dạng văn bản thuần, gửi lệnh STARTTLS, thương lượng TLS, rồi tiếp tục với phiên được mã hóa.

-- STARTTLS trên cổng 587 (submission) --
220 mail.example.com ESMTP          ← lời chào cleartext
EHLO client.example.com             ← cleartext
250-mail.example.com                ← cleartext
250-STARTTLS                        ← kẻ tấn công có thể xóa dòng này
250 OK
STARTTLS                            ← cleartext
220 Go ahead                        ← cleartext
-- Bắt tay TLS xảy ra ở đây --
EHLO client.example.com             ← giờ đã được mã hóa
AUTH PLAIN dXNlcjpwYXNz            ← được mã hóa (an toàn)

TLS Ẩn (cách RFC 8314): Kết nối với cổng TLS chuyên dụng. Bắt tay TLS là điều đầu tiên xảy ra. Không có giai đoạn cleartext nào cả.

-- TLS Ẩn trên cổng 465 (submissions) --
-- Bắt tay TLS xảy ra ngay khi kết nối --
220 mail.example.com ESMTP          ← được mã hóa từ byte đầu tiên
EHLO client.example.com             ← được mã hóa
AUTH PLAIN dXNlcjpwYXNz            ← được mã hóa

Gán Cổng Mới

Dịch Vụ Cũ (STARTTLS) Mới (TLS Ẩn) Tên IANA
Gửi Thư 587 465 submissions
IMAP 143 993 imaps
POP3 110 995 pop3s

Cổng 465 có lịch sử phức tạp. Ban đầu nó được gán cho "SMTPS" vào cuối những năm 1990, sau đó bị thu hồi để ưu tiên STARTTLS trên 587. RFC 8314 gán lại nó thành submissions (lưu ý dấu 's') cho gửi TLS ẩn. Lần này nó chính thức và vĩnh viễn.

Cổng 25 Thì Sao?

Cổng 25 dành cho chuyển tiếp server-to-server, không phải gửi client. RFC 8314 không thay đổi hành vi của cổng 25. SMTP server-to-server vẫn sử dụng STARTTLS cơ hội, với MTA-STS hoặc DANE cung cấp thực thi. Sự phân biệt này quan trọng: client xác thực bằng thông tin xác thực (phải được bảo vệ), trong khi máy chủ xác thực qua DNS, DKIM và SPF.

Chi Tiết Kỹ Thuật Chính

Yêu Cầu Phiên Bản TLS

RFC 8314 yêu cầu TLS 1.2 trở lên. TLS 1.0 và 1.1 bị gỗ hóa bởi RFC 8996. Trong thực tế, bạn nên yêu cầu tối thiểu TLS 1.2 và ưu tiên TLS 1.3.

Xác Thực Chứng Chỉ

Với TLS ẩn, client phải xác thực chứng chỉ máy chủ so với tên máy chủ dự kiến bằng cách sử dụng các quy tắc Web PKI tiêu chuẩn. Đây là một thay đổi đáng kể so với thời kỳ STARTTLS khi nhiều client chấp nhận bất kỳ chứng chỉ nào. Chứng chỉ phải:

Bản Ghi SRV cho Khám Phá Dịch Vụ

RFC 8314 hoạt động cùng với RFC 6186 để tự động cấu hình client thông qua bản ghi SRV:

; Gửi TLS ẩn (RFC 8314 + RFC 6186) _submissions._tcp.example.com. IN SRV 0 1 465 mail.example.com. ; IMAP TLS ẩn _imaps._tcp.example.com. IN SRV 0 1 993 mail.example.com. ; POP3 TLS ẩn _pop3s._tcp.example.com. IN SRV 0 1 995 mail.example.com.

Cấu Hình Client

Đối với các nhà phát triển ứng dụng tích hợp gửi SMTP:

# Ví dụ Python: TLS ẩn trên cổng 465
import smtplib

# Đúng: SMTP_SSL kết nối với TLS ngay lập tức
with smtplib.SMTP_SSL('mail.example.com', 465) as smtp:
    smtp.login('user', 'password')
    smtp.send_message(msg)

# Tránh: STARTTLS trên cổng 587 (cũ)
# with smtplib.SMTP('mail.example.com', 587) as smtp:
#     smtp.starttls()
#     smtp.login('user', 'password')

Sai Lầm Phổ Biến

Tác Động Khả Năng Gửi

Related RFCs