技术解析 · 附来源的解答
TLS 使用哪个端口?
TLS 并不使用某个通用端口。TLS 保护着许多应用协议,每个受保护的服务要么使用自己分配的端口,要么通过 STARTTLS 等命令升级已有连接。常见的例子有:HTTPS 使用 443,使用隐式 TLS 的 SMTP 邮件提交使用 465,基于 TLS 的 IMAP 使用 993,基于 TLS 的 POP3 使用 995。
TLS 没有通用端口
TLS 是一个独立于应用协议的安全层,因此正确的端口取决于运行在其上的服务,而不是 TLS 本身。HTTPS 通常使用 TCP 443 端口,而受保护的邮件访问则使用其他端口。因此,仅仅说某台服务器支持 TLS,作为配置信息是不完整的。客户端还需要知道主机名、应用协议、端口以及预期的 TLS 模式。
隐式 TLS 与 STARTTLS 使用端口的方式不同
使用隐式 TLS 时,TCP 连接一建立就立即开始 TLS 握手。邮件方面的例子包括 465 端口上的 SMTP 邮件提交、993 端口上基于 TLS 的 IMAP,以及 995 端口上基于 TLS 的 POP3。使用 STARTTLS 时,客户端先用应用协议建立连接,然后再请求升级到 TLS。客户端和服务器必须采用相同的模式;选择 465 端口却配置了 STARTTLS,往往会导致握手错误或超时。
SMTP 客户端应使用哪个 TLS 端口
对于需要身份验证的邮件提交,请使用邮件服务商文档中给出的确切端口和安全模式。587 端口通常先进行 SMTP 提交,再使用 STARTTLS;465 端口则从第一个字节起就使用隐式 TLS。25 端口主要用于服务器之间的 SMTP 中继,可能会以机会性方式使用 STARTTLS。2525 端口是某些服务商特有的替代端口,并不是通用的 TLS 或 SMTP 端口。
如何诊断 TLS 端口故障
在更改凭据或证书之前,先确认服务商的主机名、端口和加密模式。先测试基本的 TCP 连通性,再检查服务器是期望立即进行 TLS 握手,还是期望在 STARTTLS 之前先收到应用命令。超时通常指向路由、防火墙或端口封锁问题;立即出现的协议错误则往往表明隐式 TLS 与 STARTTLS 不匹配。证书校验和身份验证是在连接模式正确之后才进行的。
团队常问的问题
443 端口就是 TLS 端口吗?
443 端口是 HTTPS 的标准端口,承载基于 TLS 的 HTTP。它并不是所有受 TLS 保护的协议的通用端口。
SMTP 应该使用 465 端口还是 587 端口?
请使用服务商文档中给出的设置:465 端口通常要求隐式 TLS,而 587 端口通常先建立 SMTP 连接,再通过 STARTTLS 升级。
STARTTLS 需要单独的 TLS 端口吗?
不需要。在服务器声明支持且客户端请求 TLS 后,STARTTLS 会在其配置的端口上升级已有的应用协议连接。
为什么在正确的端口上 TLS 连接仍会失败?
端口可能是可达的,但 TLS 模式不对。请检查端点期望的是隐式 TLS 还是 STARTTLS,然后再核实主机名和证书。
一手资料
- RFC 8446:传输层安全(TLS)协议 1.3 版 — RFC Editor
- RFC 8314:明文传输已被视为过时 — RFC Editor
- RFC 3207:基于 TLS 的安全 SMTP 服务扩展 — RFC Editor