在 EC2 实例上运行 Amazon Linux,使用sendmail
. 我有一个网络解决方案的电子邮件帐户,并在我的配置中将该帐户用作SMART_HOST
中继。sendmail
除了一个小细节外,它运作良好。
在我的maillog
文件中,我看到这样的条目:
sendmail[28450]: STARTTLS=client, relay=mail.example.com.netsolmail.net., version=TLSv1/SSLv3, verify=FAIL, cipher=DHE-RSA-AES256-SHA, bits=256/256
经过一番研究,我得出的结论verify=FAIL
是本质上是无害的:连接实际上是加密的,只是无法验证主机的证书。
由于除了我之外没有人阅读日志文件,所以我不在乎。但是当消息到达时,Received
标题显示
Received: from unknown (HELO example.com) ([email protected]@12.34.56.78)
by 0 with ESMTPA; 15 Aug 2016 07:10:15 -0000
我希望看到with ESMPTSA
,但我猜证书验证失败导致“S”被压制。
如何获得有关证书问题的更多详细信息,以及如何避免验证失败?我的猜测是多个子域mail.example.com.netsolmail.net
与证书上的名称不匹配。但是我如何验证这一点,以及如何避免投诉 - 或者更确切地说,我如何才能让Received
标头确认与ESMTPSA
.
编辑:我编辑sendmail.mc
添加
define(`confLOG_LEVEL', `15')dnl
现在邮件日志提供了更多细节。verify=FAIL
在我现在看到的行之后:
sendmail[30706]: STARTTLS=client, cert-subject=/OU=GT39680792/OU=See+20www.rapidssl.com/resources/cps+20+28c+2915/OU=Domain+20Control+20Validated+20-+20RapidSSL+28R+29/CN=*.hostingplatform.com, cert-issuer=/C=US/O=GeoTrust+20Inc./CN=RapidSSL+20SHA256+20CA+20-+20G3, verifymsg=unable to get local issuer certificate
我认为这意味着验证失败的至少一个原因是 sendmail 找不到运行它的本地计算机的证书?由于我只是将传出的邮件中继到 netsol 服务器,从不接受来自互联网的传入邮件,我认为我不需要为该服务器提供证书。如果我需要一个,我在哪里/如何安装它?它可以是我用于我的网络服务器的同一个证书,还是我需要一个不同的证书?使用自签名证书是否足以让Received
标头说with ESMTPSA
,或者它需要是来自 CA 的商业证书?
编辑#2:
我接受@MadHatter 的回答。关键是得到confCACERT
定义。我很尴尬,我唯一的借口是老脑残没有接触m4源。Amazon Linux 上的默认 sendmail.mc 文件已经包含
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
在其中,我已经验证了该文件存在。但我没有注意到dnl
实际上在这些行开头的鬼鬼祟祟的小东西!我知道这意味着什么,但由于我很少看 m4 源代码,而且它就在其他一些dnl
被标记为注释的 -ed 行之后#
,我的大脑将它们记录为没有被注释掉!
实际上,我经历了一系列从 Firefox 下载证书并将 sendmail 指向我用于我们网站的 Digicert 证书的过程,但由于该主机只发送,从不接收电子邮件,因此没有其他必要。我把 and 的定义放回去了,dnl
一切都很好,在适当的行上显示了and 。confSERVER_CERT
confSERVER_KEY
maillog
verify=OK
verifymsg=ok
STARTTLS=client
但即使没有关于 TLS 的诊断,Received
与 netsol 的连接的标头仍然显示with ESMTPA
而不是with ESMTPSA
. 哦,好吧,@MadHatter 对此也有兴趣。对不起,这太长了,有点像一场疯狂的追逐。但是我学到了很多东西,并且我确实改进了我的配置(以一种非重要的方式)。我希望那些绝望地经历过这一切的人也能学到一些东西。
这在很大程度上是一个问题,我会这样认为。几十年来,我一直将
sendmail
其用作首选 MTA,但我不能声称自己是这方面的专家(即,我不是 Eric Allman)。这似乎是一条 OpenSSL 消息,而不是 MTA 消息,据我了解,这意味着验证应用程序无法获取颁发者证书的本地副本。换句话说,sendmail 无权访问包含颁发远程服务器证书的人的根证书的证书包。请记住,Linux 不提供集中式证书管理服务,因此每个应用程序都必须推出自己的捆绑包。就我而言,我使用以下 m4 代码授予 sendmail 对证书包的访问权限:
我认为这个猜测是错误的。RFC2821 和 2822 对 Received: 标头的格式非常灵活,我在其中找不到任何区分
ESMTPA
和ESMPTSA
(原文如此)的内容。我的标题都显示如下行:要了解接收者的 MTA 的含义
ESMTPA
,您必须找出 MTA 是什么,并阅读文档。在你做到这一点之前,我认为你不能对那套信件读得太多。我不认为你可以。SSL 背后的基本思想是(a)您连接的主机名(b)提供由受信任的第三方(c)在 CN 或 SAN 字段中使用该主机名签名的证书。如果不满足这些属性中的任何一个,则 SSL 指出它无法验证对等方的身份是正确的。
你不应该读太多。自签名证书在电子邮件处理中仍然很常见。在我最近发送/接收的 1919 封 TLS 安全电子邮件中,有 1764 封涉及到一个由于某种原因无法验证身份的对等方,而只有 155 封可以。您自己正在使用自签名证书运行;因此,您应该很高兴大多数人并不真正关心 SMTP TLS 对等点上的信任链!