[macOS] 为老系统更新根证书

这一问题在之前的文章中提到过,事实上,有不少人面临这个问题,期待有解决方案。在 StackExchange 上有一贴,大致译制至此,以备后用。

回复一。找一台新版本的苹果电脑,打开钥匙串访问,选择“系统根”,将其导出为名为 rootcerts.pem 的文件,复制到古董机上。将以下脚本保存为名为trustroot 的文件,赋予其执行权限后,用 sudo 命令执行它,如 sudo ./trustroot rootcerts.pem

脚本所做的是将 .pem 文件拆分为临时目录中的多个证书,然后将它们作为 trustRoot 证书添加到系统钥匙链中;然后,它们将作为除原始“系统根”钥匙链中的证书之外的受信任根运行。要知道,你并不能将它们添加到 System Roots 钥匙链中,因为它只能由操作系统更新。注意,只有第一组证书(提问中的“受信任证书”)会被复制,第二组证书和第三组证书则不会。出于安全考虑,作者不会提供一组现成的证书供大家下载使用,以免夹带私货。

回复二。在 2009 年初带有 El Capitan (10.11.6) 的旧 iMac 上尝试了以下操作,一切都按预期工作。

  • 从 http://x1.i.lencr.org/ 下载 ISRG 根 X1 证书文件;
  • 打开“钥匙串访问”应用,然后将该文件拖到该应用的“系统”文件夹中;
  • 在系统中找到 ISRG 根 X1 证书并双击它,打开“信任”菜单并将“使用系统默认值”更改为“始终信任”,然后关闭该证书并输入密码以确认更改(如果出现提示)。

回复三。给出的答案对控制台应用程序都没有帮助。我相信大多数需求都是基于 curl 的,可以做如下操作。

  • 备份 /etc/ssl/cert.pem 文件;
  • 用编辑器打开 /etc/ssl/cert.pem
  • 搜索 DST Root CA X3。如果发现此(已过期的)根证书 —— 它就是问题的根源;
  • 删除此证书所有的 42 行。始于 ### Digital Signature Trust Co. 终于 -----END CERTIFICATE-----
  • 再使用 curl --cert-status https://example.com 命令检查是否正常。

此方法因何有帮助:由兼容性考虑,LE 证书有两条路可抵达根证书。出于某种原因(兼容性?),带有“DST 根 CA X3”证书的验证路径是首选路径。而且,据我了解,curl 更喜欢自己的根证书集(而不是系统证书),这些证书位于 /etc/ssl/cert.pem。因此,删除过时的根证书会强制 curl 使用“ISRG Root X1”(当然,如果它已存在)。不过,如果你在一个非常旧的系统上执行此操作,则可能需要再执行一个步骤 —— 将此根证书添加到此文件(译者注:此处未完全理解)。只是要小心,应从可信赖的来源获取它。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注