不信任 Linux 中的中间 CA?

不信任 Linux 中的中间 CA?

这个博客

中间 CA 是由根 CA 签名的证书,可以为任何网站签署任意证书。

它们与根 CA 一样强大,但没有系统信任的完整列表,因为根 CA 可以随意创建新的 CA,并且您的系统第一眼就会信任它们。 CT 上有数千人登录。

本月出现了一个有趣的问题,显然是在 2015 年 9 月生成的:“Blue Coat Public Services Intermediate CA”,由赛门铁克签署。 (到目前为止,该 CA 签署的证书尚未到达 CT 日志或 Censys。)

我认为这是一个很好的机会来写下如何显式地不信任中间 CA,否则该中间 CA 在 OS X 中是受信任的。它不会阻止根 CA 将新的中间 CA 移交给同一组织,但总比没有好。

当我在 Ubuntu 中尝试博客中的步骤时,我下载了这个证书https://crt.sh/?id=19538258。当我打开 .crt 时,它会导入到 Gnome 密钥环中,但导入后我找不到“不信任”证书的方法。

答案1

让事情变得困难的是,Linux 有多个用于处理证书的库。

如果您使用 Mozilla 的 NSS,您可以使用以下方法主动不信任(他们的术语)证书证书工具-t trustargs选项:

$ certutil -d <path to directory containing database> -M -t p -n "Blue Coat Public Services Intermediate CA"

对于 Firefox,<path to directory containing database>通常是~/.mozilla/firefox/<???>.profile一些<???>看起来随机的字符。 (certutil 例如在 ubuntu 的 libnss3-tools 包中)

详细情况如下:

-M修改数据库

-t p将信任设置为“禁止”

-n对指定证书执行操作

即使在 NSS 内,并非所有应用程序都共享相同的数据库;所以你可能需要重复这个过程。例如,要对 Chrome 执行相同操作,请将 更改-d <path>-d sql:.pki/nssdb/

$ certutil -d sql:.pki/nssdb/ -M -t p -n "Blue Coat Public Services Intermediate CA"

但是,并非所有应用程序都使用 NSS,因此这不是一个完整的解决方案。例如,我不认为使用 OpenSSL 库可以做到这一点。

因此,任何使用 OpenSSL 提供其证书链构建(TLS、IPSec 等)的应用程序都会信任具有 Blue Coat 证书的链,除了删除对其进行签名的根 CA 之外,您无能为力。您的信任锚存储(考虑到它是赛门铁克根 CA,这很愚蠢,因为您最终会不信任一半的互联网),而依赖 NSS 的应用程序可以更精细地配置,以不信任其中包含 Blue Coat 证书的任何链。

例如,我相信 OpenVPN 使用 OpenSSL 作为证书库,因此如果您连接到使用 OpenVPN 的商业 VPN 提供商,老大哥可能会在您不知情的情况下监听您的 OpenVPN 流量。如果您真的担心这一点,请检查您的商业 VPN 提供商的根 CA 是谁 - 如果是赛门铁克/威瑞信,那么也许是时候将它们抛弃给其他人了?

请注意,SSH 不使用 X509 证书,因此您可以使用 SSH 进行连接和建立隧道,而不必担心 Blue Coat MITM 攻击。

答案2

我还不能发表评论,所以我必须在这里评论一下,在 Ubuntu Gnome 15.10 上,当我使用 @garethTheRed 的方法时,我得到:

~$ certutil -d ~/.mozilla/firefox/<directory>.default -M -t p -n "Blue Coat Public Services Intermediate CA" 
certutil: could not find certificate named "Blue Coat Public Services Intermediate CA": SEC_ERROR_BAD_DATABASE: security library: bad database.

~$ certutil -d sql:.pki/nssdb/ -M -t p -n "Blue Coat Public Services Intermediate CA"
certutil: could not find certificate named "Blue Coat Public Services Intermediate CA": SEC_ERROR_UNRECOGNIZED_OID: Unrecognized Object Identifier.

“蓝衣系统公司”也不起作用。

(这是我导入的证书:https://crt.sh/?id=19538258

相关内容