← RFC Reference

RFC 3207 – Tiện ích mở rộng SMTP STARTTLS

Proposed Standard Transport Security Obsoletes RFC 2487 Published March 2026
ELI5: Hãy tưởng tượng bạn đang trò chuyện trong một căn phòng đông đúc. Bất cứ ai cũng có thể lắng nghe. STARTTLS giống như nói "chúng ta hãy bước vào một căn phòng riêng tư" giữa cuộc trò chuyện. Bạn bắt đầu phiên SMTP bằng văn bản thuần túy, sau đó cả hai bên đồng ý chuyển sang liên lạc được mã hóa trước khi trao đổi bất kỳ nội dung nhạy cảm nào. Sau đó, không ai có thể nghe lén email đang được chuyển giao.

Tại sao RFC này tồn tại

Khi SMTP được thiết kế vào năm 1982, mã hóa không được xem xét. Các tin nhắn di chuyển qua internet dưới dạng văn bản thuần túy, và bất kỳ ai có quyền truy cập vào đường dẫn mạng đều có thể đọc được chúng. Khi internet trở nên nguy hiểm hơn, mã hóa email trong quá trình truyền tải trở nên cần thiết.

RFC 3207 xác định phần mở rộng STARTTLS cho SMTP, cho phép nâng cấp kết nối SMTP văn bản thuần túy thành kết nối TLS được mã hóa. Được công bố vào năm 2002, nó thay thế RFC 2487 bằng những làm rõ về các cân nhắc bảo mật và hành vi máy chủ.

STARTTLS là cơ chế chiếm ưu thế để mã hóa lưu lượng email máy chủ-đến-máy chủ (MTA-đến-MTA) trên cổng 25. Để gửi từ máy khách-đến-máy chủ, RFC 8314 hiện khuyên dùng TLS ngầm trên cổng 465, nhưng STARTTLS trên cổng 587 vẫn được sử dụng rộng rãi.

Cách hoạt động

STARTTLS hoạt động như một phần mở rộng SMTP, được thương lượng trong quá trình trao đổi EHLO:

  1. Máy khách kết nối với máy chủ trên cổng 25 (hoặc 587) dưới dạng văn bản thuần túy.
  2. Máy khách gửi EHLO. Máy chủ phản hồi với các khả năng của nó, bao gồm 250-STARTTLS nếu nó hỗ trợ mã hóa.
  3. Máy khách gửi STARTTLS.
  4. Máy chủ phản hồi với 220 Ready to start TLS.
  5. Cả hai bên thực hiện bắt tay TLS, thiết lập một kênh được mã hóa.
  6. Máy khách gửi EHLO mới qua kết nối được mã hóa. Danh sách khả năng của máy chủ có thể thay đổi (ví dụ: AUTH hiện được quảng cáo).
  7. Phiên SMTP tiếp tục bình thường, nhưng tất cả lưu lượng hiện được mã hóa.

Ví dụ SMTP

Thương lượng STARTTLS trong quá trình chuyển máy chủ-đến-máy chủ:

# Kết nối văn bản thuần túy được thiết lập trên cổng 25 S: 220 mx.example.com ESMTP C: EHLO sender.example.net S: 250-mx.example.com S: 250-SIZE 52428800 S: 250-STARTTLS S: 250 ENHANCEDSTATUSCODES # Máy khách thấy STARTTLS có sẵn, yêu cầu nâng cấp C: STARTTLS S: 220 2.0.0 Ready to start TLS # --- Bắt tay TLS xảy ra ở đây --- # Tất cả lưu lượng tiếp theo được mã hóa # Máy khách PHẢI phát hành lại EHLO sau TLS C: EHLO sender.example.net S: 250-mx.example.com S: 250-SIZE 52428800 S: 250-AUTH PLAIN LOGIN S: 250 ENHANCEDSTATUSCODES # Lưu ý: STARTTLS không còn được quảng cáo (đã hoạt động) # Lưu ý: AUTH hiện được quảng cáo (chỉ có sẵn sau TLS) C: MAIL FROM:<alice@sender.example.net> S: 250 2.1.0 OK C: RCPT TO:<bob@example.com> S: 250 2.1.5 OK C: DATA S: 354 Start mail input C: [nội dung tin nhắn...] C: . S: 250 2.0.0 OK

Chi tiết kỹ thuật chính

TLS cơ hội vs. Bắt buộc

Hạn chế quan trọng của STARTTLS như được xác định trong RFC 3207 là nó cơ hội theo mặc định:

TLS cơ hội dễ bị cuộc tấn công giảm thiểu: một kẻ tấn công mạng có thể loại bỏ khả năng STARTTLS khỏi phản hồi EHLO, buộc kết nối ở trạng thái văn bản thuần túy. Máy khách không có cách nào để biết máy chủ hỗ trợ TLS vì thương lượng ban đầu diễn ra dưới dạng văn bản thuần túy.

Xác minh chứng chỉ

RFC 3207 không yêu cầu xác minh chứng chỉ nghiêm ngặt cho các kết nối MTA-đến-MTA. Trong thực tế, nhiều máy chủ sử dụng chứng chỉ tự ký hoặc chứng chỉ không phù hợp với tên máy chủ MX. Lý do: mã hóa cơ hội mà không cần xác minh vẫn tốt hơn không có mã hóa nào cả. Nó bảo vệ chống lại giám sát thụ động ngay cả khi nó không ngăn chặn các cuộc tấn công trung gian hoạt động.

Để có những bảo đảm mạnh mẽ hơn, hãy sử dụng:

Re-EHLO sau STARTTLS

Sau khi bắt tay TLS hoàn tất, máy khách PHẢI phát hành một lệnh EHLO mới. Danh sách khả năng của máy chủ từ trước TLS phải bị loại bỏ. Điều này rất quan trọng vì:

STARTTLS trên các cổng khác nhau

Cổng Giao thức Hành vi TLS
25 Chuyển tiếp SMTP STARTTLS (cơ hội cho MTA-đến-MTA)
587 Gửi STARTTLS (thực tế bắt buộc — AUTH yêu cầu nó)
465 Gửi TLS ngầm (bắt tay TLS trước bất kỳ lệnh SMTP nào)

Báo cáo TLS

RFC 8460 xác định Báo cáo TLS SMTP (TLSRPT), cho phép chủ sở hữu miền nhận các báo cáo về lỗi kết nối TLS. Đây là tương đương STARTTLS của các báo cáo tổng hợp DMARC — nó cho bạn biết khi nào các kết nối với máy chủ của bạn không thành công trong thương lượng TLS.

_smtp._tls.example.com. IN TXT "v=TLSRPTv1; rua=mailto:tls-reports@example.com"

Những sai lầm phổ biến

Tác động khả năng giao hàng

Related RFCs