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


63

我们有一个在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服务器上的受信任根证书列表进行比较可能非常有帮助。

Answers:


100

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

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

或用于标准的安全smtp端口:

openssl s_client -connect mail.example.com:465

美丽。OpenSSL中类似的验证错误,但更多细节。现在我们知道问题不仅限于我们的邮件服务器。
天鹰

1
@Miles:如果您在Windows上尝试此操作,请不要忘记它openssl不支持使用Windows证书存储,因此它将始终无法通过验证。
grawity 2010年

3
如何查看服务器证书的到期日期?
nimrodm

9
@nimrodm:将证书传递到“ openssl x509
-text

2
@DanAndreatta @nimrodm或通过管道将其openssl x509 -noout -dates输出以缩短输出。
Skippy le Grand Gourou

9

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

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


这对我
有用,

1
我无法在网站上找到测试。有指针吗?
Zero3

1
在“ Internet安全电子邮件很容易”部分中有一个输入框,带有黑色的“ CheckTLS”按钮。
Ketan Patel

@KetanPatel Aaaand ...在哪里可以找到“ Internet安全电子邮件很容易”部分?
Zero3 '18

不好意思,这似乎要检查DNS中列出的SMTP服务器的域并查询它们,但是我想直接检查该服务器。
kerridge0

4

如果您没有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))

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

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

这会为您拉取OpenSSL库,这使安装变得容易一些。


来自Python ssl模块文档:“此模块使用OpenSSL库。” 因此,就发生的事情而言,这个答案有点误导。
fbmd

@fbmd感谢您的反馈。此编辑更好(请参见最后一句话)吗?
2016年

是的,那更好。
fbmd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.