在使用TLS时拒收Microsoft的Sendmail邮件
我将以一个声明说,我不是sendmail的专家。 我很less使用它,但在这种情况下,我必须为我的客户。 背景: 我的一个客户端有一个运行Debian 7.7,Sendmail 8.14.4和OpenSSL 1.0.1e的邮件服务器。 它会生成电子邮件(像帐户重置的东西),并将其发送给客户。 我会称之为“服务器A”。 从服务器A发送到域* .outlook.com(奇怪不包括@ outlook.com消息,由hotmail处理)的任何邮件服务器的消息由于TLS握手失败而被推迟。 这只是Microsoft所拥有的服务器的问题; 一切正在工作。 日志中的错误看起来像这样: sendmail[22213]: ruleset=tls_server, arg1=SOFTWARE, relay=mail.protection.outlook.com, reject=403 4.7.0 TLS handshake sendmail[22213]: s2L9EakQ022098: to=<[email protected]>, delay=00:00:55, xdelay=00:00:31, mailer=esmtp, pri=181653, relay=mail.protection.outlook.com. [145.123.225.25], dsn=4.0.0, stat=Deferred 注意:这些日志是由于我的客户不希望复制和粘贴的东西less,他们意外泄漏敏感数据。 信息在那里,我只是手工input,所以忽略错别字等。 这就是我能从日志中得到的所有东西,即使是15日志(除此之外,系统开始变成磁盘限制)。 问题: 握手的tcpdump显示服务器A连接到outlook.com,EHLO成功,服务器A启动了STARTTLS,outlook.com随后响应其证书链。 所有这一切正常。 然后,服务器A收到Microsoft证书链后,服务器A发送自己的客户端证书。 Outlook.com然后丢弃连接。 我们的客户证书是我们用于组织内validation的自签名证书,不应该出去outlook.com。 从我有限的知识,我最好的猜测是,outlook.com正在请求客户端证书进行validation(或至lesssendmail认为其请求证书),服务器A上的sendmail是强制性的。 然后Outlook.com将删除连接,因为证书是无效的或不是它所期望的。 两个问题: 为什么sendmail将客户端证书作为STARTTLS的一部分发送给outlook.com? 有没有办法阻止sendmail向我们域外的服务器发送客户端证书,即使服务器请求它? 从我做的实验中,如果我简单地忽略证书请求并发送消息,outlook.com将接受消息。 在任何人build议之前,我已经创build了一个访问映射,防止TLS与一些与Microsoft相关的IP地址连接。 这不是一个好的永久性解决scheme,因为我更喜欢使用TLS,并且IP地址列表必须手动维护,这是一个麻烦。