检查SMTP服务器是否启用SSL的最佳方法是什么?

检查SMTP服务器是否启用SSL的最佳方法是什么?

后续问题:如果尚未启用SSL,如何启用SSL。

操作系统是CentOS。

这取决于您是指SSL还是TLS。

  • SSL在TCP / 465上有它自己的专用端口。 最好的方法来testing它的存在将是使用OpenSSL的美妙的s_client将协商SSL欺骗你。

    openssl s_client -connect localhost:465 

    如果你的服务器没有绑定到本地主机,那么显然用IP或主机名replace它。

  • TLS看起来就像普通的SMTP一样。 encryption是从纯文本协议上进行协商的。 您可以通过向服务器发出EHLO请求来testing它是否可用。 您可以使用Netcat或Telnet客户端。

     $ nc -v localhost 25 localhost [127.0.0.1] 25 (smtp) open 220 mail.example.com ESMTP Exim 4.69 Fri, 11 Sep 2009 09:25:20 +0100 ehlo test 250-mail.example.com Hello localhost [127.0.0.1] 250-SIZE 10485760 250-PIPELINING 250-STARTTLS 250 HELP 

    重要的路线是从最后一个广告STARTTLS能力的第二条线。

为了说明如何为您的邮件服务器启用SSL / TLS,您需要告诉我们您正在使用的邮件包。

有一个简单的工具。 你发给他们一封电子邮件,他们回复了一堆细节:

https://www.checktls.com/perl/TestSender.pl

如果您正在运行CentOS,则可能使用了Sendmail。 安装Sendmail-mc软件包。 在/etc/mail/sendmail.mc里面有一些你需要查看TLS的指令:

 dnl # Rudimentary information on creating certificates for sendmail TLS: dnl # cd /usr/share/ssl/certs; make sendmail.pem dnl # Complete usage: dnl # make -C /usr/share/ssl/certs usage dnl # dnl define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl dnl define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl dnl define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl 

一旦你有这个工作,你可以通过类似这样的SSL启用Sendmail:

 DAEMON_OPTIONS(`Addr=142.46.200.221, Port=465, Name=SSA, M=Eas') 

哦,并阻止了一堆时间来玩它,然后才把它做好。

当我这样做的时候,我几乎总是要运行三个sendmail实例:

  • 一个在端口587上使用各种SMTP-AUTHconfiguration启用TLS(因此经过身份validation的远程用户可以发送任意邮件);
  • 一个在端口465上启用SSL,具有各种SMTP-AUTHconfiguration(相同的原因,不同的客户端(感谢Microsoft Outlook“Express”);以及
  • 一个启用了TLS但没有AUTH,locking,以便它只接收有效的本地收件人的邮件(远程发件人可以使用TLS或不使用TLS)。

每个人都有一个单独的configuration文件。 应该有一种方法来让前两个运行在同一个实例上监听两个端口,但我永远不能让它正常工作。

如果你足够大,这些不同的实例可以在不同的机器上运行。

在我看来,在这个页面上给出的答案是完全错误的。

原因是SSL / TLS + SMTP可能意味着两件不同的事情。

一个是你在SSL / TLS中套接字的地方。 如果服务器要同时处理未encryption的和encryption的stream量,那么为此需要两个端口,每个stream量types一个端口。 按照惯例,SMTP服务器通常将端口25用于未encryption的通信,端口465用于encryption的通信。 通过使用诸如stunnel之类的外部工具,这实际上可以以这样的方式实现,使得客户端和服务器都不知道实际的通信量在encryption的套接字上传播。 所以即使你的SMTP服务器不支持SSL / TLS,你也可以实现这种方法..但是像sendmail和postfix这样的服务器确实支持这个,所以不需要外部工具。

另一种方法是使用STARTTLS 。 这是对SMTP协议的扩展,因此要求服务器和客户端都支持它。 使用STARTTLS,服务器可以在同一个套接字上同时提供encryption的stream量和未​​encryption的stream量,也就是说,你可以使用端口25。 您可以通过在端口25上连接SMTP服务器来查看SMTP服务器是否启用了STARTTLS,并在此页面的其他地方解释Dan发出EHLO命令。

SSL和TLS都只是encryption协议,TLS是SSL的后继者。

我从这里得到了我的信息。

SMTP服务器使用的术语加速了这两种方法之间的混淆。 考虑Postfix的参数smtpd_tls_security_levelsmtpd_use_tls及其相关文档。 这些参数处理STARTTLS ,而不是TLS 。 其他SMTP服务器在混淆术语方面同样做得很好。