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

Sky*_*awk 73 security exchange-2007 windows-server-2008 certificate 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 服务器上的受信任根证书列表进行比较可能会非常有帮助。

Dan*_*tta 126

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

openssl s_client -connect mail.example.com:25 -starttls smtp
Run Code Online (Sandbox Code Playgroud)

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

openssl s_client -connect mail.example.com:465
Run Code Online (Sandbox Code Playgroud)

  • @nimrodm:将证书通过管道传送到“openssl x509 -text” (11认同)
  • 如何查看服务器证书到期日期? (5认同)
  • @DanAndreatta @nimrodm 或者通过管道将其传送到 `openssl x509 -noout -dates` 以获得更短的输出。 (4认同)
  • `printf '退出\n' | openssl s_client -connect mail.example.com:25 -starttls smtp | openssl s_client -connect mail.example.com:25 -starttls smtp | openssl s_client -connect mail.example.com:25 -starttls smtp | openssl x509-日期-noout` (4认同)

小智 10

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

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


bro*_*wly 6

如果您没有 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))
Run Code Online (Sandbox Code Playgroud)

其中 [主机名] 是服务器。

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

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