如何智能主机指纹确定了吗?它们是否仅依赖于智能主机,还是也依赖于客户端?
不久前,我在旧 Ubuntu 中配置了 Gmail 智能主机指纹,效果很好。然而,当我在新 Ubuntu 18.04 中再次配置它时,我发现旧设置不再起作用。
因为我没有使用我的 gmail 智能主机,而是使用我的 ISP 的,所以我不知道它什么时候会坏掉。所以现在我的问题是,它坏掉是因为 gmail 更改了它的智能主机指纹(可能性很小),还是每台机器的智能主机指纹都不同?也就是说,我不能盲目地复制已经运行的东西,即使是复制到同一台机器上的新操作系统,对吗?
另外,我尝试了以前的方法来获得智能主机指纹,就像文章中说的那样,但现在对我来说不起作用。获取智能主机指纹的正确方法是什么?
谢谢。
答案1
不存在“智能主机指纹”之类的东西。这些是 TLS 证书指纹,恰好属于此上下文中的 SMTP 中继服务器(智能主机)——但此处的所有内容同样适用于 IMAPS、HTTPS、FTPS……任何使用 TLS 的东西。
TLS 证书指纹通常完全不依赖于客户端:它们是服务器证书的 SHA1(或 SHA256)哈希,并且一般来说服务器对每个人都使用相同的证书。
但负载均衡器后面的服务器可能是例外:大型站点可能拥有多个服务器,但服务器名称必须相同,尽管它们可能共享一个证书,但这根本无法保证——他们也很容易同时使用 20 或 50 个证书。
即使对于同一台服务器,它实际上很可能指纹会改变– 每次更新证书(因为有效期会发生变化)或由于其他原因(新的私钥、新的发行者或新的域名……)重新颁发证书时,证书都会有所不同。
虽然证书过去通常颁发 3-5 年(并手动安装),但新的做法是实现流程自动化并使用短暂的证书,通常为 90 甚至 45天。Google 自 2014 年左右开始这样做,Let's Encrypt 从第一天起就一直如此运作。(根据 CA/B 论坛规则,即使是“标准”长期 TLS 证书现在也限制为 2 年。)
因此,这个选项唯一tls_fingerprint
有用的情况是当你知道确切地证书何时需要更改(例如,如果您是更改证书的人)。否则,每隔一两个月它就会破坏您的配置。
实际上,至少 Linux 发行版在更新 CA 证书包方面相当快。(我的意思是,如果他们不,您确定要在您的计算机上运行该操作系统吗?)
所以我想说这篇文章试图用错误的问题来吓唬读者。更大的担忧是 CA 证书包通常包含来自不同国家的一些可疑的、受政府控制的 CA。
方案一:如果你愿意,你可以做一个风俗 tls_trust_file
仅包含提供商使用的单个 CA:例如,告诉 msmtp 仅信任 DigiCert,不信任其他任何 CA。这是一种常用方法,称为“CA 固定”。但它仍有一些被破坏的可能性,因为服务器管理员可以自由选择与哪些 CA 开展业务。
方案 2:有些程序支持不同的指纹类型——SPKI 指纹(subjectPublicKeyInfo 的哈希值)。这些仅代表原始密钥对,不包含任何其他证书元数据。服务器可以定期更新其证书,同时保留相同的密钥对,从而保留相同的 SPKI 指纹。
(但是,即使您的客户端支持 SPKI 指纹识别(msmtp 不支持),只有当您知道服务器管理员以这种方式更新其证书时,它才会具有优势。大多数时候他们不会这样做。)