在我们公司,我们有一个内部 CA 证书,用于签署各种事情,包括代理(MITM'd)HTTPS 连接。
假设我们使用这个 CA 为“localhost”签名一个密钥以用于自动化测试(所以我们不必搞乱自定义 Firefox 配置文件)。该密钥将分发给开发人员,可能通过将其签入源代码库。
这种方法有什么危险?假设攻击者窃取了密钥,然后可以签署 localhost HTTPS。他们能做什么?
在我们公司,我们有一个内部 CA 证书,用于签署各种事情,包括代理(MITM'd)HTTPS 连接。
假设我们使用这个 CA 为“localhost”签名一个密钥以用于自动化测试(所以我们不必搞乱自定义 Firefox 配置文件)。该密钥将分发给开发人员,可能通过将其签入源代码库。
这种方法有什么危险?假设攻击者窃取了密钥,然后可以签署 localhost HTTPS。他们能做什么?
有了这样的证书,任何信任您的内部 CA 的系统都会相信在“localhost”上运行的服务器是真实的,即真的在“localhost”上运行。但是“localhost”可以通过网络访问,只能在本地访问,因此如果您的客户端成功连接到,https://localhost/whatever
那么它已经知道它正在与本地计算机通信。因此,没有额外的安全问题。
当然,证书只验证主机名。它没有说明服务器是恶意的还是良性的,只说明了服务器是谁。
但是请注意,如果有人修改了本地“hosts”文件,那么对“localhost”的访问可能会被重定向到其他地方——但是可以在您的机器上执行此操作的人已经拥有它,并且可以在您的信任存储中插入他自己的恶意 CA反正。
我认为 localhost 没有比任何其他证书更严重的威胁。SSL 证书的主要滥用是让系统相信您是他们想要与之交谈的系统,但攻击者无法破坏前往 localhost 的流量,除非客户端计算机已经以相当低的速度受到破坏级别(至少有权修改 HOSTS 文件)。在这一点上,整个游戏是不必要的,因为他们可以简单地安装自己的证书或做任何他们想做的事情。
在最初的问题发生两年后,情况似乎发生了一些变化。面对同样的问题,我发现letsencrypt服务没有为localhost签署证书,原因在这里说明:https: //github.com/letsencrypt/boulder/issues/137和这里:https://cabforum。 org/pipermail/public/2015-June/005673.html
简而言之,确实“多个解析器(尤其是 OS X)向网络发送 localhost 查询”而不是将它们保持在本地,因此拥有 localhost 的签名证书可能会带来安全风险。
几乎没有威胁。您是否相信自己的计算机不会尝试对您进行 MITM 攻击?那么应该没有问题。
当您尝试访问 localhost 时,甚至没有触及网络适配器。如果有人偷了钥匙,他们可以用它来说服他们自己的电脑它就是它自己。或者他们可以访问的任何计算机(但是,如果他们可以访问计算机,那么您会遇到更大的问题,因为他们可以在未加密的数据通过 TLS之前拦截它)
唯一的危险是您的主机文件已被篡改。