# STARTTLS（明文连接升级为 TLS）是什么？

> STARTTLS 是一条协议命令，用于把 SMTP、IMAP、POP3 等协议中已建立的明文连接，在同一端口上升级为 TLS 加密连接。

Source: https://ssl.sh/zh/glossary/starttls/
Last updated: 2026-11-10

STARTTLS（POP3 中叫 STLS）的流程是：客户端先以明文连接，确认服务器声明支持 TLS，再发送命令，把同一条 TCP 连接切换为 TLS。SMTP 的 STARTTLS 由 [RFC 3207](https://www.rfc-editor.org/rfc/rfc3207) 定义，IMAP 和 POP3 见 RFC 2595，XMPP、LDAP 也有各自的等价机制。与之相对的是隐式 TLS：连接一建立就直接开始 TLS，使用专门端口，如 SMTP 提交用 465、IMAP 用 993、POP3 用 995。

## 为什么重要
升级这一步本身没有保护。主动攻击者可以把服务器响应里的 STARTTLS 能力删掉，或让命令执行失败，很多客户端就会继续用明文通信。邮件服务器之间在 25 端口上的 TLS 通常是“能加密就加密”，往往根本不校验证书。防御办法：让用户侧客户端强制要求 TLS；服务器之间则发布 [DANE](https://ssl.sh/zh/glossary/dane/) 的 [TLSA](https://ssl.sh/zh/glossary/tlsa/) 记录（RFC 7672）或 MTA-STS 策略（RFC 8461），让发信方坚持经过认证的 TLS。RFC 8314 建议用户收发邮件优先使用隐式 TLS。在企业邮件系统和云服务器上自建邮局时，这些都值得逐项核对。

## 例子
```bash
openssl s_client -connect mail.example.com:25  -starttls smtp -servername mail.example.com </dev/null
openssl s_client -connect mail.example.com:587 -starttls smtp -servername mail.example.com </dev/null
openssl s_client -connect mail.example.com:143 -starttls imap -servername mail.example.com </dev/null
```

也可以用 [STARTTLS 检测工具](https://ssl.sh/zh/tools/starttls-checker/)从外部网络做同样的测试。

## 常见误区
- **STARTTLS 是和 TLS 不同的另一种协议。** 它只是一条命令，执行后连接里跑的就是普通的 TLS 和普通的证书。
- **双方邮件服务器都支持 STARTTLS，邮件就是端到端加密的。** 它只保护每一跳，没有 DANE 或 MTA-STS 时某一跳被降级也可能无人察觉；端到端保护需要 S/MIME 之类的方案。
- **465 和 587 端口可以随便换。** 465 要求第一个字节起就是 TLS，587 要求先明文再 STARTTLS，配错会导致握手失败或超时。

## 相关术语

- [TLS](https://ssl.sh/zh/glossary/tls/): TLS 是 IETF 制定的传输层安全协议，为 HTTPS 等网络连接提供加密、完整性保护和服务器身份认证，是 SSL 的继任者。
- [DANE](https://ssl.sh/zh/glossary/dane/): DANE 是一种利用经 DNSSEC 签名的 TLSA 记录，把 TLS 服务器的证书或公钥与其域名绑定起来的协议。
- [TLSA 记录](https://ssl.sh/zh/glossary/tlsa/): TLSA 记录是一种 DNS 记录，声明某个端口和协议上的 TLS 服务必须出示哪张证书或哪个公钥，供 DANE 校验使用。
- [降级攻击](https://ssl.sh/zh/glossary/downgrade-attack/): 降级攻击是指攻击者迫使客户端和服务器协商出比双方实际支持的更旧的协议版本或更弱的算法，从而利用其中的弱点。
- [SSL 剥离](https://ssl.sh/zh/glossary/ssl-stripping/): SSL 剥离是一种中间人攻击，攻击者截获本应把用户引向 HTTPS 的跳转或链接，让用户一直停留在明文 HTTP 上。
- [S/MIME](https://ssl.sh/zh/glossary/smime/): S/MIME 是一种使用 X.509 证书和 CMS 格式对电子邮件进行端到端签名和加密的标准。
