为什么不使用私有 CA?

信息安全 tls
2021-08-16 13:00:31

在阅读这篇文章时,我有一个问题:

虚假证书欺骗了来自 AIM、Chase 等应用程序中的错误加密

(基本上,某些 Android 应用程序,例如 Chase 的银行应用程序,可能会忽略证书验证错误,这可能是因为该应用程序试图在旧设备和 Android 版本上适应过时的 CA 列表。)

在这种银行应用程序的上下文中,为什么开发人员不使用私有 CA 而不是通过其中一个公共 CA 签署服务器(以及就此而言,客户端)证书?毕竟,开发人员控制着交易的两端。除了懒惰之外,我是否错过了什么?

3个回答

文章中讨论的问题主要有以下几种:应用程序滥用协议,因为它们忽略了验证错误。他们这样做是因为应用程序开发人员将 SSL 用作黑匣子,它只是被假定为“增加安全性”,因为它存在。许多 SSL 库的文档状态对这些开发人员一点帮助都没有,当它存在时,对于没有研究过 X.509 证书验证的任何人来说,几乎都不清楚。

使用他自己的 CA 的人会意识到该问题并了解使用证书时发生的情况。就是解决方案:应用程序设计者不会犯文章提到的错误。私有 CA 只是应用程序设计人员在知道自己在做什么时所采用的逻辑解决方案。维护私有 CA 可能既复杂又昂贵,但这表明认证通常是一个难题。重要的一点是应用程序设计人员必须掌握 SSL 和证书的作用和不作用。只要他们不这样做,再多的私有 CA 也不会拯救他们。

使用私有 CA 并不会真正改变这一点。错误在于证书验证在应用程序代码中执行的方式,这意味着应用程序可能被欺骗接受假证书。

例如,您可以使用相同的名称从任何主要 CA 购买完全合法的代码签名证书。对于大多数标准证书,CA 不会验证详细信息。由于该设备仅进行一些原始检查,因此它将接受该证书并允许您执行中间人攻击。即使供应商运行他们自己的私有 CA,这仍然是可能的。

查看其他问题的一些答案,其中详细介绍了漏洞。

除了懒惰之外,我能看到的唯一真正原因是维护私有 CA/PKI 基础设施的成本。

做得好(具有良好的安全性)可能是一个非常昂贵的提议。显然,在基本级别(设置密钥、签署证书等)非常容易,但是如果您不能很好地保护 CA 密钥,那么如果这些密钥被盗(取决于您的应用程序的用途)可能会非常糟糕。以及推送更新有多容易)。