我对SSL / TLS有一个基本的误解,我希望可以清除它。
我理解它的方式,当我获得我的网站的证书时,它拥有我的所有信息,并由我的证书颁发机构(VeriSign或任何人)签名。当有人从我的站点请求使用SSL / TLS的页面时,证书将转发给用户,并使用证书颁发机构众所周知的公钥进行验证。然后,用户可以查看证书并查看我的信息。他们确信我是我自己所说的,并且由于验证工作正常,因此该消息未被篡改。
什么阻止我将代理放在浏览器和真实网站的中间,只是发送真实网站的证书(我不知道这是不对的,我想我此时已经有了我的浏览器把它拉下来验证它对客户端并让客户认为它真的是网站whateverdomain.com当它真的是我在中间?
感谢。
答案 0 :(得分:3)
就SSL / TLS的工作方式和证书交换而言,这两个答案基本上都是正确的。但是,让我们具体看一下这与你原来的问题有关。
为了使其正常工作,代理服务器必须能够:
因此在实践中,很难让代理服务器在企业环境之外模拟SSL / TLS会话。在企业环境中,这是一个不同的故事。公司通常会在桌面上的浏览器中注册自己的内部CA证书。当您使用TLS登录银行时,公司Web代理将动态生成具有正确域名的证书,以便呈现给您的浏览器。您的浏览器会看到https://www.mybank.com以及来自受信任CA的匹配证书,并且很高兴。同时,公司Web代理为您的银行维护一个单独的TLS会话。在这两者之间,代理可以记录您的所有HTTPS帖子和获取电话,包括任何表格的内容,如ID和密码。
在企业环境之外,大多数攻击者不需要遇到那么多麻烦,因为他们可以坐在Wi-Fi热点并运行SSLStrip。大多数人都不会注意到会话实际上不是SSL,特别是当攻击者将favicon更改为锁定符号时。
答案 1 :(得分:2)
首先,所有证书都是公开的,不加密。但是,它使用CA的私钥进行签名。
当客户端连接到服务器时,它们基于某些秘密信息(即服务器的私钥)执行密钥交换(并且服务器仅向客户端发送没有私钥的公共证书)。这是第1步。
步骤2是客户端验证给定证书并确保它(客户端)已连接到预期站点,即站点已提供合法证书。这种验证是一个复杂的过程(检查许多参数并做出许多步骤)。验证涉及检查服务器证书的签名。
现在关于MITM攻击。通常,它是防止MITM攻击的第2步。如果验证很弱,攻击者可以尝试伪造证书并歪曲网站。另一个可能的弱点是CA在没有经过适当验证或安全漏洞的情况下颁发了证书(最近发生在某些Comodo的子CA中)。
我们有一个很好的(我希望:)描述SSL如何在corresponding article中工作,尽管它没有解释MITM攻击。
答案 2 :(得分:1)
证书仅包含SSL连接的公钥。客户端将使用证书中的公钥与服务器进行通信,因此代理将需要关联的私有密钥,该密钥保密。
请注意,公钥/私钥对通常用于交换用于大量通信的对称加密密钥。
答案 3 :(得分:1)
首先,关于术语:当有人使用私钥加密(散列)文档时,我们不再称之为加密 - 它称为签名。因此,证书颁发机构(CA)使用其私钥对文档(哈希)进行签名,因此每个人都可以使用CA's public key验证文档的有效性。
其次,SSL现在称为TLS。
现在,回答您的问题:获得服务器的公钥后,您可以发送服务器可以读取 的消息,因为没有其他人拥有其私钥。因此,如果您加密,例如,AES密钥,服务器会向您发送消息“Hello world!”使用该密钥加密,您可以确定该消息确实来自服务器,因为没有其他人可以读取密钥。
实际的handshake in TLS比这更复杂,但这是基本的想法。
答案 4 :(得分:1)
我认为在不使用证书然后添加证书的情况下更容易解释这一点。
鉴于证书保证公钥,如果我们删除证书,您只需拥有公钥。如果您的站点有公钥并将其呈现给某个客户端,那么只有拥有相应的私钥才具有意义和目的。否则你的诈唬将立即由客户端调用---客户端将选择一个随机数字,如1729,使用您的公钥加密它,并询问您选择的数字是什么。如果没有相应的私钥,您将无法回答此问题,客户将拒绝您。
来自接受机构的证书所做的全部是保证网站skaz.com的公钥是xyz。如果我们没有证书,那么冒名顶替者可以创建一个(公共,私人)密钥对(abc,mno)并告诉全世界skaz.com的公钥是abc。
回答你的问题什么阻止我将代理放在浏览器和真实网站的中间,只是发送真实网站的证书,这是经典的人在中间攻击,如果在这种情况下随机数--- 1729 ---客户端加密被用作所有未来流量的加密密钥(也称为会话密钥),那么代理无法做任何事情。对于例如如果客户端发送使用会话密钥加密的密码,则冒名顶替者代理无法读取它。
总之,您可以向任何人发送任何实体证书,但不知道相应的私钥,它实际上是无用的。