修复启动validation=失败,verifymsg =无法获得本地签发者证书

使用sendmail在EC2实例上运行Amazon Linux。 我有一个电子邮件帐户与networking解决scheme,并使用该帐户作为我的sendmailconfiguration中的SMART_HOST中继。 除了一个小的细节,它运作良好。

在我的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本质上是无害的:连接实际上是encryption的,只是主机的证书不能被validation。

由于除了我之外没有人读取日志文件,所以我不在乎。 但是当消息到达时, Received头显示

 Received: from unknown (HELO example.com) (info@example.com@12.34.56.78) by 0 with ESMTPA; 15 Aug 2016 07:10:15 -0000 

我希望能够看到with ESMPTSA但是我猜测证书validation失败会导致“S”被压制。

怎样才能更详细地了解证书有什么问题,以及如何避免validation失败? 我的猜测是, mail.example.com.netsolmail.net的多个子域与证书上的名称不够紧密。 但是,我怎样才能validation这个问题呢?我怎样才能避免这种抱怨?或者更确切地说,我怎样才能得到Received头来确认与ESMTPSA的安全连接。

编辑:我编辑sendmail.mc添加

 define(`confLOG_LEVEL', `15')dnl 

现在maillog给出了更多的细节。 在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 

我认为至less有一个validation失败的原因是sendmail找不到它所运行的本地机器的证书? 由于我只是转发外发邮件到netsol服务器,从不接受来自互联网的传入邮件,我不认为我需要有这个服务器的证书。 如果我需要一个,我在哪里/如何安装? 它可以是我用于我的networking服务器相同的证书,还是我需要一个不同的? 使用自签名证书是否足够好,可以使Received标题with ESMTPSA一起说,还是需要从CA获得商业证书?

编辑#2:

我接受@MadHatter的答案。 关键是获取confCACERT定义。 我很尴尬,我唯一的借口就是老年人的大脑不要gr m m4的来源。 Amazon Linux上的默认sendmail.mc文件已经有了

 define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl 

其中,我已经证实,该文件存在。 但是我没有注意到那些实际上在这些线条开始处的偷偷摸摸的小dnl ! 我知道这意味着什么,但是因为我很less看m4的源代码,而且正好在其他一些被标记为#评论之后,我的大脑注册了他们没有被注释掉!

实际上,我经历了一系列从Firefox下载证书并在我用于我们网站的Digicert证书上指向sendmail的sendmail,但是由于这台主机只发送过,没有收到任何邮件,所以没有其他的必要。 我把dnl放在confSERVER_CERTconfSERVER_KEY的定义上,一切正常, maillog在相应的STARTTLS=client行显示verify=OKverifymsg=ok

但即使没有关于TLS的诊断信息,连接到netsol的Received报头仍然with ESMTPA而不是with ESMTPSA 。 哦,马哈特也有这个涂料。 对不起,这是如此漫长,有点疯狂的追逐。 但是我学到了很多东西,而且确实改善了我的configuration(以非重要的方式)。 我希望有人迫不及待地想通过这个办法来学习一些东西。

  • 在Exchange 2010中安排/排队大型电子邮件,推迟到等待时间下降为止
  • 550无效的HELO / EHLO必须包含FQDN或IPv6
  • Exchange 2007传输规则仅适用于SMTP
  • 在Windows Server 2012中configurationSMTP以使用另一个configuration了SMTP的Windows服务器发送电子邮件(本地连接)
  • 如何configurationPostfix忽略某些域的relayhost?
  • 电子邮件停留在Windows 2008 R2networking版的SMTP队列中
  • One Solution collect form web for “修复启动validation=失败,verifymsg =无法获得本地签发者证书”

    这在很大程度上是一个问题,我会这样做。 我已经使用sendmail作为我的首选MTA几十年了,但我不能说它是一个专家(即我不是埃里克·奥尔曼)。

    verifymsg=unable to get local issuer certificate

    我认为至less有一个validation失败的原因是sendmail找不到它所运行的本地机器的证书?

    这似乎是一个OpenSSL的消息,而不是MTA之一 ,据我所知,这意味着validation应用程序无法获得发行人的证书的本地副本。 换句话说,sendmail不能访问包含颁发远程服务器证书的根证书的证书包。 请记住,Linux不提供集中的证书pipe理服务,因此每个应用程序必须推出自己的软件包。 在我的情况下,我让sendmail访问具有以下m4代码的证书包:

     define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.with.intermediate.crt')dnl 

    我希望能够看到ESMPTSA,但是我猜测证书validation失败会导致“S”被压制。

    我认为猜测是错误的。 RFC2821和2822对于Received:头的格式非常有弹性,而我在其中找不到区分ESMTPAESMPTSA (sic)的任何东西。 我的标题都显示行,如:

     Received: from example.com (example.com [80.70.90.61]) by lory.teaparty.net (8.14.4/8.14.4) with ESMTP id u6G25OXi006577 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=FAIL) for <me@example.net>; Sat, 16 Jul 2016 03:05:24 +0100 

    要了解ESMTPA接收者的MTA意味着ESMTPA ,你必须找出MTA是什么,并阅读文档。 在你这样做之前,我不认为你可以多读这些信件。

    当服务器主机名与证书不匹配时,我可以避免启动verify=fail

    我不认为你可以。 SSL背后的基本理念是(a)您连接到的主机名(b)在CN或SAN字段中提供由受信任的第三方(c)用该主机名签署的证书。 如果这些属性中的任何一个不符合,SSL注意到它不能validation对等的身份是正确的。

    你不应该读太多, 自签名证书在电子邮件处理中仍然很常见。 在我发送/收到的1919封TLS安全电子邮件中,有1764件涉及一位同行,因为某种原因他的身份无法validation,而只有155名可以。 您自己正在使用自签名证书运行; 因此,您应该很高兴大多数人不关心SMTP TLS对等体上的信任链。

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.