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

14

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

在SSL中,这是我理解的过程:

1)客户端

  • 发送支持的加密算法
  • 发送客户端随机数
  1. 服务器
  • 选择(并发送)对称算法
  • 公共密钥算法
  • MAC算法
  • 发送自己的证书
  • 发送服务器随机数
  1. 客户端
  • 验证证书
  • 提取公钥
  • 生成一个预主密钥(PMS)
  • 使用服务器的公钥进行加密并发送
  1. 客户端和服务器
  • 从PMS和随机数计算主密钥(MS)
  • PMS切片以生成两个加密和两个MAC密钥
  1. 客户端
  • 发送所有握手的mac(以确保它们没有被修改过)
  1. 服务器
  • 发送所有握手的mac

问题

在第二步骤中,阻止了中间人攻击的发生是什么? 为什么中间人攻击者无法捕获服务器发送的证书并更改其中的公钥(到它拥有私钥的某个值)。

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

然而,由于客户端尚未拥有公钥,服务器无法加密证书。当服务器从权威机构(如VeriSign)获取密钥时,该密钥是否会使用VeriSign的公钥进行预加密呢?我认为这应该可以实现,因为所有Web浏览器都应该拥有大多数权威机构的公钥。


1
SSL(或TLS)的详细工作原理说明,适合任何感兴趣的人:http://www.moserware.com/2009/06/first-few-milliseconds-of-https.html - sixtyfootersdude
3个回答

11

证书并没有加密,但是它是由认证机构(CA)签名的。因为这些机构检查证书中包含的信息(尤其是证书所属的URL),所以同一个URL不应该有第二个有效证书。

CA的证书会被检查是否在信任库中(例如在您的浏览器中)。如果此信任库存在漏洞,或者您信任无效的证书,那么就没有防范中间人攻击的保护措施了。


2
那么,是什么阻止了Tudy(中间人)更改证书中的信息但保留相同的签名?签名是否以某种方式是证书中信息的哈希值?签名如何确保证书的安全性? - sixtyfootersdude
2
@sixtyfootersdude 你说得完全正确。证书基本上是一些内容(某人的公钥,其所属的URL…)+ CA的私钥加密的该内容的哈希值。因此,每个人都可以解密哈希值并将其与实际哈希值进行比较。但是,更改内容的人无法重新创建加密的哈希值。 - Jens Schauder
6
证书的哈希值将被计算并使用CA的私钥进行加密。为了验证,验证者将使用相同的哈希算法计算哈希值,并使用CA的公钥解密签名,然后比较这两个哈希值。 - Vatine
5
@sixtyfooter:是的,这正是它的作用。签名通常是使用机构的私钥对哈希(或哈希值)进行加密,然后任何人都可以使用该机构的公钥进行解密并验证哈希,但没有私钥的知识就无法伪造它。 - BlueRaja - Danny Pflughoeft

3
证书由一些可信的机构签名,例如Verisign
当您下载浏览器时,这些根机构的证书会直接内置在其中。例如,在Firefox中,您可以通过转到“工具-->选项-->高级-->加密-->查看证书-->颁发机构”来查看根证书。
但是,如果任何一个根证书机构被攻击,那么您就有可能遭受中间人攻击,因为证书可能会被伪造。

仅仅是详细说明一下这个过程:如果你想要一个由Verisign签名的证书,你必须向他们证明你拥有相关的私钥(通过为他们签署某些内容),并且你拥有该域名。通常,这只涉及在该域上回复一封电子邮件,但对于EV证书(http://en.wikipedia.org/wiki/Extended_Validation_Certificate),这需要更多的操作(需要你亲自前往他们的建筑物并提供几种身份证明)。 - BlueRaja - Danny Pflughoeft
这就是为什么CACert遭受如此糟糕的时期的原因,不幸的是。 - Boldewyn
不,中间人攻击者仍然需要提供有效的“CertificateVerify”消息。只有拥有证书公钥的私钥的人才能这样做,这一部分与CA无关。 - user207421

1

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

假设Trudy位于您和您的银行(bank.com)之间。Trudy可以在第2步随意更改公钥,但证书的签名将无效。因此,Trudy必须找到一种重新生成签名的方法。可以肯定的是,受信任的CA不会为他这样做。因此,他必须使用虚假CA进行签名,而这个CA并不被您的浏览器所信任。从理论上讲,这仍然是安全的。

然而,大多数浏览器(特别是IE 6)会显示模糊的安全警告,而大多数人不理解并且只是忽略它,根据一些测试结果。


哦,看起来像是一个有趣的骗局。我敢打赌大多数人不会注意那些模糊(而且技术性很强)的警告。但我想对于银行等事情,人们会更加小心谨慎。我想知道是否可能有一个更清晰的警告。 - sixtyfootersdude
2
经验表明,唯一的解决方案是禁止连接。无论警告有多清晰,用户都会点过去。我记得有一个非常搞笑的例子,弹出一个消息框,标题为“病毒警告”,框的内容是“这是一个病毒,你想继续吗”,有两个选项框,每个都写着“是”。 - President James K. Polk
“可以毫不犹豫地说,可信CA不会为他这样做。” 这是错误的。有数百个可信CA,你只需要让其中任何一个为你发行一个虚假证书就可以进行静默MITM攻击了。一些CA因为广泛滥用而被吊销,我们可以假设NSA从200X年末开始也在这样做,其他犯罪组织也没有问题购买或发行伪造证书。要在Facebook、Google和其他网站上实时观察此类攻击,请安装Firefox证书巡逻扩展程序。” - martinwguy
不,中间人攻击者仍然需要提供有效的“CertificateVerify”消息。只有拥有证书公钥的私钥的人才能这样做,这一部分与CA无关。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接