我知道 Windows 使用一种主密钥来加密存储在操作系统证书存储中的私钥。此外,我发现 Linux 中的证书和密钥并不总是存储在同一位置(如这个帖子)。Linux 系统上是否有针对这些不同种类目录的同等或额外的安全措施?或者系统是否依赖于为每个私钥设置的自定义密码?
答案1
您的问题有点难以理解,因为它混淆了几件事。
首先要澄清的问题是“Windows 与 Linux”的区别。
您可能知道,Linux 是一个操作系统核心。 也就是说,它是一段与计算机硬件协同工作的低级软件,并以所谓的“系统调用”的形式向运行的程序公开特定的应用程序编程接口(API)。在内核,以及某些约定(例如进程模型等)——实际上,请阅读其他地方的内容。主要问题是 Linux 本身并不“了解”任何有关 SSL/TLS、证书的信息——更不用说证书存储了;这些东西是在高于内核的级别上实现的。
Linux 内核可用于实现操作系统,有很多操作系统:Debian、Red Hat、Android——仅举几例。
操作系统 (OS) 实现 SSL/TLS、证书等。
即便如此,实现这些功能也需要特定的软件包。有时,需要很多软件包。首先,我知道几个实现 SSL/TLS 和证书管理的软件包。例如,OpenSSL 可能是使用最广泛的。FireFox 浏览器、Thunderbird 邮件客户端和 Chrome 浏览器等知名产品都使用了 Mozilla 的 NSS。GNUTLS 也得到了广泛的使用,还有 PolarSSL、几个最近的 OpenSSL 分支和许多其他实现。
更复杂的是,基于 Linux 的不同操作系统可能以相同的方式构建软件包,但它们使用不同的库来实现 SSL/TLS。
另一方面,Windows 是一个操作系统(运行在 Windows NT 内核上),与 Linux 一样,其内核本身既不实现 SSL/TLS,也不实现证书管理。但与基于 Linux 的操作系统相反,Windows 有其“官方”(由 Microsoft 作为 Windows 的一部分创建)的 SSL/TLS 实现,称为“schannel”(“安全通道”),以及一组实现您提到的操作系统级证书存储的核心支持库和服务。
现在是更复杂的部分。;-)
不是全部为 Windows 编写的软件包使用其操作系统提供的方法来处理 SSL/TLS 和证书。例如,Windows 版本的 Firefox、Thunderbird 和 Chrome 仍然使用它们捆绑在软件包中的 NSS 库来实现 SSL/TLS 和管理证书。许多最初为非 Windows 系统编写的软件甚至在 Windows 上也使用 OpenSSL 或类似的实现。换句话说,如果您将某个证书导入 Windows 商店,这些软件包将无法“看到”它。
总而言之,管理证书的状态并不像您想象的那么统一 - 根据您的问题来判断:一些软件可能会使用系统证书存储 - 无论它是什么;其他一些软件则使用它们所使用的库提供的任何东西(如果有的话)。
我知道这并不能回答你的问题,但我想证明,由于我所概述的困难,这个问题没有什么意义。
顺便说一下,Android做有自己的证书存储区(受 shell 级 PIN 密码保护)。
答案2
除了设置 700 权限之外,似乎没有其他安全级别根所有者并添加自定义密码。但是,您可以更进一步,使用linux系统确保只有所有者(甚至不是 root)可以访问特定的私钥。尽管如果有人可以物理访问您的计算机,这样做就没什么用了。入侵者可能能够更改启动选项(使用selinux=0
)以获取对必要文件夹的访问权限。
现在,你关于 Windows 中额外的安全感的观点似乎不太正确,因为设置了一个自定义密码意味着加密密钥文件中的私钥。但是,如果你说的是正确的,那么与 Windows 不同,你没有掌握Linux 领域中的密码。现在我能想到的一种实现这种概念的方法是使用恩夫斯。同样,如果您需要在保险丝座不可用时(例如在系统启动期间)访问私钥,它将不起作用。
编辑:根据@Xyon 的评论,更正 selinux 部分。