背景:
我的客户端有一个运行Debian 7.7,Sendmail 8.14.4和OpenSSL 1.0.1e的邮件服务器.它会生成电子邮件(帐户重置等内容)并将其发送给客户.我称之为“服务器A”.
从服务器A发送到域* .outlook.com上的任何邮件服务器的消息(奇怪的是不包括@ outlook.com消息,这些消息由hotmail处理)由于TLS握手失败而被推迟.这只是微软拥有的服务器的一个问题;其他一切都在运作.日志中的错误类似于:
sendmail[22213]: ruleset=tls_server,arg1=SOFTWARE,relay=mail.protection.outlook.com,reject=403 4.7.0 TLS handshake sendmail[22213]: s2L9EakQ022098: to=<blah@microsoft.com>,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
注意:这些日志是由于我的客户端不希望复制和粘贴的东西减少,而是意外泄漏敏感数据.信息在那里,我只是手工打字,所以忽略错别字等.
这就是我从日志中获得的全部内容,即使是15日志(除此之外,系统开始变为磁盘绑定).
问题:
握手的tcpdump显示服务器A连接到outlook.com,EHLO成功,服务器A启动了STARTTLS,outlook.com随后响应了其证书链.所有这一切都正常.
然后,在服务器A收到Microsoft证书链后,服务器A发送了自己的客户端证书. Outlook.com然后放弃了连接.
我们的客户证书是我们用于组织内部验证的自签名证书,不应该发送到outlook.com.
根据我的有限知识,我最好的猜测是outlook.com要求验证客户端证书(或者至少sendmail认为它要求证书),服务器A上的sendmail是强制性的.然后,Outlook.com将丢弃连接,因为证书无效或不符合预期.
两个问题:
>为什么sendmail会将客户端证书作为STARTTLS的一部分发送到outlook.com?
>有没有办法阻止sendmail将客户端证书发送到域外的服务器,即使服务器请求它?根据我已经完成的实验,如果我只是忽略证书请求并发送消息,outlook.com将接受该消息.
在任何人建议之前,我已经创建了一个访问映射,可以防止TLS与某些与Microsoft关联的IP地址建立连接.这不是一个好的永久解决方案,因为我更喜欢使用TLS,并且必须手动维护IP地址列表,这是一个麻烦.