首页/网络/协议速查/SMTP 加密:STARTTLS 与隐式 TLS

SMTP 加密:STARTTLS 与隐式 TLS

同一台服务器两种加密姿势:STARTTLS 在 25/587 上先明文问候再升级;隐式 TLS(465)连接即握手,从第一字节就是密文。

协议速查网络更新于 2026-10-13

SMTP 加密方式是什么

SMTP 有两种加密姿势。STARTTLS 是「先明文打个招呼,再升级为加密」:客户端连上端口后发 EHLO,从应答里看到服务器支持 STARTTLS,就发 STARTTLS 命令把这条连接升级为 TLS 会话,默认用在 25 与 587 端口。隐式 TLS 则是「连上就是密文」:TCP 握手完成后立刻做 TLS 握手,客户端从第一字节起就在加密通道里说话,典型端口是 465。二者加密强度相同,差别在升级时机与对中间设备的友好度。

基本信息

STARTTLS端口 25/587,EHLO 后发 STARTTLS 再握手
隐式 TLS端口 465,TCP 连上立即 TLS 握手
规范RFC 3207(STARTTLS)、RFC 8314(现代端口建议)
提交端口587 提交、465 隐式加密提交,均用于客户端发信
排障工具openssl s_client -starttls smtp -crlf
加固方向MTA-STS、DANE、强制 TLS 证书校验

典型使用场景

  • 配置邮件客户端:内网中继选 587 + STARTTLS,或 465 隐式加密
  • 排查「认证失败」:确认客户端是否真的完成了 TLS 升级
  • 给自建 MTA 加固:要求对端必须 STARTTLS 才能投递
  • 验证证书:手动跑一次 openssl s_client 观察证书链与协议版本
  • 识别服务器是否支持现代端口:探测 465 是否可用

手动验证加密会话

手动验证加密会话
# STARTTLS:连接后进入交互,观察 EHLO 是否返回 STARTTLS
openssl s_client -starttls smtp -connect mail.example.com:587 -crlf -quiet
# 隐式 TLS:不指定 -starttls,直接握手
openssl s_client -connect mail.example.com:465 -servername mail.example.com
# 端口连通性速测
nc -zv mail.example.com 25 465 587

两种模式对照

模式端口触发方式特点
STARTTLS25/587EHLO 后发 STARTTLS 再握手兼容老链路,但存在降级攻击面
隐式 TLS465连接建立即 TLS 握手无降级空间,现代提交推荐
提交端口587STARTTLS 加密后 AUTH客户端发信标准入口
中继端口25MTA 之间投递常受云厂商出站封禁
强制校验任一校验对端证书再投递配合 MTA-STS/DANE 可防中间人
STARTTLS 有降级(STRIPTLS)攻击面:中间人可以拦掉 EHLO 应答里的 STARTTLS 一行,逼客户端在明文通道里继续发送凭据与正文。客户端与 MTA 都该把加密设为「必须」,一旦对端不支持就失败放弃,而不是回退明文。
明文回退是最容易被忽略的配置:把「STARTTLS 可选」配成「失败也继续」后,一次网络抖动或一次被篡改的应答,就能让凭据与邮件正文以明文经过中间节点,且收发双方都不会收到任何报错提示。

易错点

  • 把「STARTTLS 可选」配成失败也继续明文发送,凭据与正文可能被中间人截获
  • 客户端用 465 端口却未启用隐式 TLS,连接建立后立刻失败或得到乱码应答
  • 只验证端口可连就认定加密生效,未实际完成 TLS 握手与证书校验
  • 忽略对端证书校验,允许任意自签证书,失去防中间人的意义
  • 把 587 当普通明文端口直连发信,被对方以未认证或异常流量拒收

数据来源与参考

  • RFC 3207(STARTTLS)
  • RFC 8314(现代端口建议)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌