SSL:如何保护证书免受中间人攻击?

Posted

技术标签:

【中文标题】SSL:如何保护证书免受中间人攻击?【英文标题】:SSL: How are certificates protected against man in the middle attacks? 【发布时间】:2011-01-07 18:08:35 【问题描述】:

我的问题是关于 ssl 中的证书,但我认为这些问题应该适用于所有证书。为了清楚起见,我已经包含了 SSL 过程。

在 SSL 中,我理解的程序是:

1)客户

发送支持的加密算法 发送客户端随机数
    服务器
选择(并发送)一个 对称算法 一种公钥算法 MAC 算法 发送它的证书 发送服务器随机数
    客户
验证证书 提取公钥 生成预主密钥 (pms) 使用服务器公钥加密并发送
    客户端和服务器
从 PMS 和 nonces 计算主分泌 (MS) PMS 切片以生成两个加密和两个 mac 密钥
    客户
发送所有握手的 mac(以确保它们之前没有被修改)
    服务器
发送所有握手的 mac

问题

是什么阻止了中间人在第二步发生攻击?为什么中间的人,比如 trudy,不能捕获服务器发送的证书并更改其中的公钥(更改为它拥有私钥的东西)。

我假设证书以某种方式加密。

但是服务器无法加密证书,因为客户端还没有公钥。当服务器从权威机构(如 veri-sign)获取密钥时,是否会使用 verisign 的公钥对密钥进行预加密?我认为这应该可行,因为所有网络浏览器都应该拥有大多数权威机构的公钥。

【问题讨论】:

深入描述 ssl(或 TLS)如何为任何感兴趣的人工作:moserware.com/2009/06/first-few-milliseconds-of-https.html 【参考方案1】:

证书由一些受信任的权威机构签署,例如Verisign。

这些根权限的证书在您下载它们时直接内置在浏览器中。您可以在 Firefox 中查看根证书,例如,通过转到工具-->选项-->高级-->加密-->查看证书-->权限

但是,如果这些根证书颁发机构中的任何一个遭到破坏,那么您是正确的,证书可能会被伪造,从而导致中间人攻击成为可能。

【讨论】:

只是为了详细说明这个过程:如果你想要一个由 Verisign 签署的证书,你必须向他们证明你有相关的私钥(通过为他们签名),并且你拥有相关域名。通常,这仅涉及回复该域的电子邮件,但对于 EV 证书 (en.wikipedia.org/wiki/Extended_Validation_Certificate),涉及更多(要求您亲自前往他们的大楼并提供多种形式的身份证明) ...这就是为什么 CACert 的日子不好过的原因。 没有。 MITM 仍然必须提供有效的CertificateVerify 消息。他只有拥有证书公钥的私钥才能做到这一点,这部分与CA无关。【参考方案2】:

不,证书未加密。但它是由证书颁发机构 (CA) 签署的。由于它们会检查证书中包含的信息(尤其是证书所属的 URL),因此给定 URL 不应该有第二个有效证书。

根据信任库(例如在您的浏览器中)检查 CA 的证书。如果此信任库遭到破坏,或者您信任无效证书,则无法防止中间人攻击

【讨论】:

那么是什么阻止 Tudy(中间人)更改证书中的信息但留下相同的签名?签名是否是证书中信息的哈希值?签名如何保证证书的安全? @sixtyfootersdude 你完全正确。证书基本上是一些内容(某人的公钥,它所属的 url ...)+ 用 CA 的私钥加密的内容的哈希。所以每个人都可以解密散列并将其与实际散列进行比较。但是更改内容的人无法重新创建加密哈希。 对证书进行哈希处理。然后使用 CA 的私钥对该散列进行加密。为了验证,验证者计算相同的哈希值,并使用 CA 的公钥解密签名并比较两个哈希值。 @sixtyfooter:是的,就是这样。签名通常是散列(或散列的散列),然后使用授权的 private 密钥进行加密。然后,任何人都可以使用权威的公钥密钥对其进行解密并验证哈希值,但没有人可以在不知道私钥的情况下伪造它。【参考方案3】:

您实际上指出了 PKI 的一个弱点。

假设 Trudy 在您和 yourbank (bank.com) 中间。 Trudy 可以在第 2 步随意更改公钥,但证书的签名将无效。所以 Trudy 必须想办法重新生成签名。可以肯定地说,受信任的 CA 不会为他这样做。因此,他必须使用您的浏览器不信任的假 CA 进行签名。这在理论上仍然是安全的。

但是,根据一些测试,大多数浏览器(尤其是 IE 6)会显示模糊的安全警告,大多数人不理解并忽略。

【讨论】:

呵呵,看来是个有趣的骗局。我敢打赌,人们不会注意那些含糊的(和技术性的)警告。但我怀疑对于银行业和类似的事情,人们会更加小心。我想知道是否有可能有更清晰的警告.. 经验表明,唯一的解决方案是禁止连接。无论警告多么清晰,用户都会点击通过。我记得一个有趣的例子,一个消息框弹出,标题为“病毒警告”,框的内容是“这是一个病毒,你想继续吗”,有两个框,每个框都说“是”。 >"可以肯定地说,受信任的 CA 不会为他这样做。"呃没有。有数百个受信任的 CA,您只需要让其中任何一个颁发假证书,您就可以进行静默 MITM。一些 CA 因广泛滥用而被撤销,我们可以假设 NSA 自 200X 年末以来一直在这样做,并且其他犯罪组织购买或签发假证书没有问题。要在 facebook、google 和其他网站上实时看到这种情况,请安装 Firefox Certificate Patrol 扩展。 没有。 MITM 仍然必须提供有效的CertificateVerify 消息。他只有拥有证书公钥的私钥才能做到这一点,这部分与CA无关。

以上是关于SSL:如何保护证书免受中间人攻击?的主要内容,如果未能解决你的问题,请参考以下文章

使用HTTPS时的最佳做法

在 Safari 中保护 Web 服务器免受 MITM 攻击

保护 Azure WebApp 免受 BEAST 攻击

中间人攻击和 SSL [重复]

保护 Firebase 可调用函数免受中间人的影响

如何防止对 API Key 和 API Secret 的 MITM 攻击?