使用STARTTLS和SSL / TLS进行身份验证

时间:2014-11-13 20:13:14

标签: ssl starttls

据我所知,两者都加密了连接。但是,SSL / TLS“强制”邮件客户端从一开始就加密通道。现在让我说我telnet mail.server 25,在ehlo之后,我被提供了STARTTLS作为服务器允许我(邮件客户端)使用的身份验证选项。如果我选择STARTTLS,是否意味着我可以对服务器(使用我的数字证书)验证自己(邮件客户端)?为什么以及如何?

我的做法如下,但我不明白客户端身份验证部分在哪里:

telnet some.mail.server 25
ehlo some.mail.server
...
250-STARTTLS
...
STARTTLS
mail from: guy
rcpt to: otherGuy
data
someting
.
quit

我不应该将客户端证书发送到服务器吗?我使用openssl s_client -starttls smtp尝试了这个,它实际上提供了-cert和-key选项来指定证书和私钥。

因此,事实上,与STARTTLS相比,SSL / TLS的唯一缺点是,由于连接立即被加密,因此客户端无法在同一端口上发送其证书。只有服务器才能发送其证书。正确?我头脑中有很多困惑......请为我澄清一下。

1 个答案:

答案 0 :(得分:1)

使用STARTTLS的直接TLS模式和TLS升级都可以使用客户端证书。 这些模式之间的唯一区别在于,如果服务器宣布支持STARTTLS,则使用STARTTLS启动普通连接,然后再升级。中间的人可以剥离此公告(类似于sslstrip),从而阻止升级到TLS。这实际上是在实践中使用,请参阅https://www.eff.org/deeplinks/2014/11/starttls-downgrade-attacks

不幸的是,用于宣布哪些服务器负责邮件传输的MX记录只能通告主机而没有端口,在这种情况下,默认端口25将与普通SMTP协议一起使用。因此,您只能使用STARTTLS命令获取TLS。