将自签名证书添加到受信任的存储

信息安全 证书
2021-09-07 15:47:20

我一直在阅读有关证书的内容,并且经常说不应将自签名证书添加到受信任的授权存储中,即使您这样做了,也应在使用后立即将其删除。

MSDN 如何:创建临时证书以供开发期间使用

请确保通过右键单击证书,然后单击删除从受信任的根证书颁发机构和个人文件夹中删除任何临时根颁发机构证书。

为什么将自签名证书添加到受信任存储会被视为安全风险?黑客如何利用它?

有人可以用例子解释我吗?

4个回答

自签名证书

如果您有一个与您签署的 CSR 相同的CA(私有)密钥,那么您将创建一个自签名证书相反,如果您为要确认其身份的实体和用于确认身份的 CA 创建单独的密钥,则它正式不再是自签名证书。

自签名证书主要用于测试目的,因此是临时的。这可以通过限制它们的有效期来强制执行,但通常不是为了方便而这样做的。

现实世界的 CA 是如何做到的

CA 将具有密钥/证书的层次结构(包括您可能听说过的证书链)。如果您 - 或您的操作系统供应商 - 选择信任根 CA 证书,则意味着信任使用根 CA 密钥签署证书的子 CA。

这意味着根 CA 密钥需要最高的安全性,因为它可用于创建任意数量的子 CA,如果有人选择信任根 CA 证书,这些子 CA 最终将被信任。

请确保通过右键单击证书,然后单击删除从受信任的根证书颁发机构和个人文件夹中删除任何临时根颁发机构证书。

现在非常有意义,如果您认为根 CA 证书(带有密钥)正确将具有被滥用的最大潜力并为攻击者创造最大的收益。如果妥协。除非您现在使用它们来签署 Sub-CA CSR,否则您将希望安全地保存这些内容。因此,删除它们并保留一份副本以供以后签署 CSR 使用(如果需要)。

但是,由于引用显然是关于“临时根授权证书”,我认为线索隐藏在临时中,这是您作为系统管理员为您自己的 CA 和子 CA 定义的东西(即您是否打算在未来与否)。

基本上,您可以考虑删除临时 CA 证书/密钥,使其对攻击者不可用,类似于实际根 CA 密钥的安全措施。它假定此临时 CA 将不再用于签署任何(开发使用)证书。

因此,这个小词临时性在引文中的含义比乍看之下要多一些。

这在实践中的样子

假设您有一个永不过期的根 CA 密钥(尽管在大多数情况下它只是一个相对较长的时期,例如 20 年)和一个相应的根 CA 证书。您将希望保护密钥免受任何损害,尤其是在证书受到许多人信任的情况下。例如,Verisign 或 Comodo 的根 CA 证书就是这种情况。

然后,该根 CA 密钥将用于签署子 CA 的证书(具有自己的不同密钥),从而在您的浏览器或 Microsoftsigntool以及许多其他实用程序允许的证书链中创建前两个链接检查。根 CA 密钥永远不会直接用于处理您的 CSR,从而确认您作为最终用户/网站/公司的身份。

每个相应的子 CA 通常仅用于特定目的(有用于某些目的的额外字段,例如代码签名),其有效期将是根 CA 证书的子集。

但是,这是根 CA 的密钥和子 CA 的密钥之间的一个区别:根 CA 密钥可以在大多数情况下安全地隐藏起来(这里讨论物理安全,除非绝对需要为新的子 CA 签署 CSR CA,而 Sub-CA 密钥可能会在某种高度安全的服务器上用于签署客户 CSR(考虑到像 Verisign 这样的真实证书颁发机构时)。这意味着子 CA 比根 CA 面临更大的风险,以及为什么要首先应用不同级别的安全性。

优点是,如果子 CA 受到损害,它的证书可以放入 ARL/CRL(授权/证书撤销列表),而将根 CA 证书放入 ARL/CRL 仅出于技术原因才真正需要(例如,使用现在受损的 MD5 哈希,密钥长度不再被认为是安全的......)。附加到其中任何一个的成本是几个层面的决定性因素:

  • 安全存储密钥的成本,特别是根 CA 密钥必须得到最大程度的保护
  • 更改根 CA 证书与更改子 CA 证书时的成本
  • 撤销(子)CA 证书时的成本

假设您想访问https://www.google.com

您如何确定您确实在访问https://www.google.com您可以检查 SSL 证书提供的信息是否真实。

在此处输入图像描述

如果攻击者对您执行 MITM 攻击,浏览器将以红色挂锁而不是绿色挂锁的形式显示警告。

在此处输入图像描述

如果攻击者能够将自签名证书添加到您的受信任存储中,浏览器将验证攻击者用来攻击您的虚假网站实际上是真实的。这具有明显的安全隐患,因为您将无法通过 SSL 证书验证网站的真实性。

编辑:感谢@Adnan 和@D3C4FF 指出我的答案最初并未解决您添加自己的开发证书的情况。)

关于添加您自己生成的用于开发目的的证书,我认为不会有任何大的安全风险。假设您生成的根 CA 证书保存在本地并且没有发布到某个地方(或者在您完成后最好还是删除它),那么其他人将无法签署将在您的浏览器上显示为受信任的证书。微软的建议仍然是一个合理的建议,没有必要用你自己生成的随机证书来混淆你的根存储。可能会使发现攻击者添加的实际恶意根证书变得更加困难。

如果某个坏人窃取了您计算机信任的 CA 的私钥,那么他将能够为任意服务器名称颁发假证书,而您的计算机将接受它们作为真正的证书而不会发出警告。这是你对抗假冒的最后一道防线www.google.comwww.paypal.com等等——欢迎中间人攻击,再见你的银行账户。

这种最坏的情况可以通过运气来避免(通常效果很好),并通过保护您的自定义 CA 的私钥免遭盗窃,这并不像看起来那么容易,尤其是对于经常有间歇性物理访问的同事到您的机器上,例如当您外出喝咖啡时(通过物理访问,他们可以对您做很多坏事,但是窃取私钥文件确实特别谨慎且难以检测)。

特里的回答很好地解释了证书的工作原理。我会直接尝试回答你的问题。

在 Web 浏览器中拥有数字证书的全部目的是在浏览器和您可能希望与之通信的 Web 服务器之间启用信任。您的浏览器通过使用预先安装的根证书的数字签名验证来验证服务器发送的证书。这种加密机制可以让您确信与您通信的一方确实是它声称的那个人。

您可以在浏览器中添加自己的三级证书层次结构供您个人使用。这将避免浏览器在遇到不可信证书时显示的警告页面,但想象一下当您放错浏览器信任的证书时的情况。聪明的攻击者可能能够使用被盗的证书成功执行 MITM,并且由于您的浏览器信任该证书,因此在访问看起来合法的假网站时不会发出警告。

Nb 基于 SSL 证书的信任的全部目的是避免 MITM