【发布时间】:2012-11-21 13:49:06
【问题描述】:
如果这个问题真的很幼稚,请原谅,但我尽可能多地搜索,但无法找到相关答案。
过去三天我一直在尝试了解 https 的工作原理。 这些天之前我所知道的只是对称和非对称密码学是如何工作的。 是时候了解一下这两者是如何应用在 ssl-https 上,实现所谓的数据加密和服务器身份验证了。
关于数据加密和防止中间人攻击的一切都很清楚
我似乎并不完全了解服务器身份验证的工作原理,因此非常感谢您的帮助。
目前我的理解如下:
当客户端通过 https 连接到服务器时,服务器会发送一个由 CA 签名的证书。 此服务器证书是一个文本文件,其中包含有关服务器的信息(名称、所有者电子邮件、公钥等)以及数字签名。
此签名是服务器信息内容的哈希,由 CA 私钥加密。
客户端通过再次自己生成服务器信息的哈希并使用 CA 的公钥解密签名来检查签名的有效性。如果解密后的签名值与产生的哈希值相同,则签名和证书后续都是有效的。
请注意,公私加密方案具有双重性质。消息可以用公钥加密,用私钥解密。相同的消息可以用私钥加密,也可以用公钥解密。
我们需要记住的是,证书是一个静态且不可更改的文件。对文件的任何更改都会导致签名不匹配。
我现在将描述一种欺骗https的方法:
假设有一个 URL = https://wwww.TheBank.com/ebanking 的电子银行网站(公共 IP = 195.134.0.1) 我连接到这个 URL,我的浏览器获得了服务器证书。 (theBank.cer)
同时,我是一家网吧的老板。我的网吧有自己的路由器、DNS 和 DCHP 服务器,我可以控制这些服务器。它也有一个网络服务器。
我将网络服务器配置为拥有 ip 195.134.0.1,与银行的相同 我创建了一条到我的路由器的路由,它将 195.134.0.1 的连接请求发送到我的 Web 服务器 我将我的 DNS 配置为将上述银行 URL 指向 195.134.0.1(我的 Web 服务器) 我在我的网络服务器上放置了一个欺诈性银行网站。对于此站点上的任何连接,我都会指示 Web 服务器将我之前下载的证书发送给客户端。(theBank.cer)
一位用户来到我的咖啡馆,连接到我的网络并尝试连接到这家银行。我的服务器将银行证书发送给他。他的浏览器将确认证书的有效性,因为它确实是有效的,并允许连接到我的假网站,因为它的 URL、IP 和主机名与真实的相同。
所以我的欺诈成功了。
当然,这个安全漏洞太明显了,不可能是真的。意思是我在这个服务器身份验证过程中没有理解一些东西。有人可以向我解释一下我在这里缺少什么吗?
【问题讨论】:
标签: https certificate classloader signature fraud-prevention