如何检查远程 SMTP 服务器的 TLS 证书?

如何检查远程 SMTP 服务器的 TLS 证书?

我们有一台在 Windows Server 2008 上运行的 Exchange 2007 服务器。我们的客户使用另一家供应商的邮件服务器。他们的安全策略要求我们使用强制 TLS。直到最近,这一直运行良好。

现在,当 Exchange 尝试将邮件传递到客户端的服务器时,它会记录以下内容:

无法在连接器“默认外部邮件”上与域安全域“ourclient.com”建立安全连接,因为 ourclient.com 的传输层安全性 (TLS) 证书验证失败,状态为“UntrustedRoot”。请联系 ourclient.com 的管理员以解决问题,或从域安全列表中删除该域。

从 TLSSendDomainSecureList 中删除 ourclient.com 会导致使用机会性 TLS 成功传递消息,但这充其量只是一种临时的解决方法。

客户是一家规模极大、对安全极为敏感的跨国公司。我们在那里的 IT 联系人声称不知道他们的 TLS 证书有任何变化。我曾多次要求他确认生成证书的机构,以便我可以排除验证错误,但到目前为止他无法提供答案。据我所知,我们的客户可以用内部证书颁发机构的证书替换他们的有效 TLS 证书。

有谁知道手动检查远程 SMTP 服务器的 TLS 证书的方法,就像在 Web 浏览器中检查远程 HTTPS 服务器的证书一样?确定谁颁发了证书并将该信息与我们 Exchange 服务器上的受信任根证书列表进行比较可能会非常有帮助。

答案1

您可以使用 OpenSSL。如果您必须使用 检查证书STARTTLS,则只需执行

openssl s_client -connect mail.example.com:25 -starttls smtp

或者对于标准安全 smtp 端口:

openssl s_client -connect mail.example.com:465

答案2

我知道这是一个老问题,但对于希望确认其电子邮件服务器上的 SSL 证书有效性的管理员来说,这仍然是一个相关的问题。

您可以访问https://www.checktls.com并免费运行测试。

答案3

如果您没有 OpenSSL,您也可以使用这个 Python 代码片段:

import smtplib
import ssl

connection = smtplib.SMTP() 
connection.connect('[hostname].')
connection.starttls()
print ssl.DER_cert_to_PEM_cert(connection.sock.getpeercert(binary_form=True))

其中 [hostname] 是服务器。

来源:https://support.google.com/a/answer/6180220

这将为您提取 OpenSSL 库,使安装变得更容易一些。

答案4

  1. 访问https://www.checktls.com/TestReceiver
  2. 在里面电子邮件目标字段中,输入要测试的 SMTP 服务器主机名或 IP 地址(例如:smtp.domain.com)
  3. 在里面输出格式选择证书详细信息
  4. 运行测试
  5. 寻找发行人在结果中

相关内容