我试图了解 IMAP 中的 STARTTLS 命令如何准确工作以及发送时会发生什么变化。在我作为客户端在登录过程之前发送命令“STARTTLS”并收到响应“确定立即开始 TLS 协商”之后,对于我作为客户来说有什么改变吗?进一步通信,即请求和响应的格式,一些附加信息等?我指的是 API 级别,而不是较低级别。
答案1
该STARTLS
过程告诉客户端和服务器开始协商加密连接,因此所有进一步的数据都将进行 TLS(SSL,足够接近)加密。这将防止人们嗅探您的流量(例如用户名、密码)。
现在可以配置一些服务器来提供不同的服务;例如,IMAP 服务器可能拒绝允许通过普通连接执行 LOGIN 命令,但允许通过 TLS 加密连接执行。
我们可以看到差异。在此示例中,对于正常的 IMAP 连接,我们显示:
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS LOGINDISABLED] Dovecot ready.
请注意“LOGINDISABLED”部分。
如果我们通过 TLS 连接到同一服务器
* CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN
现在我们可以看到“AUTH”可用,因此我可以尝试登录。
IMAP 并不是唯一可以这种方式工作的服务;例如带有普通连接的 SMTP:
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
并使用 TLS
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
再次有一个AUTH
可用的新命令。