1

我目前正在使用不允许 https 连接的免费主机,并且由于我的网站不托管任何敏感或私人内容,因此我不会升级到付费托管。但是由于我的站点确实处理密码,并且由于许多用户对不同的站点使用相同的密码,所以我想在处理这些密码时设置合理的安全/加密量。

来自Secure login: public key encryption in PHP and Javascript,看起来在通过网络发送密码时使用公共/私人加密来保护密码的最大问题是攻击者可以修改发送给客户端的公钥,然后截取加密后的密码,用攻击者的私钥解密,然后用站点的公钥加密,然后发送到站点,本质上一开始就破解了加密的全部意义。

当然,任何加密都比没有加密好,但我想尽我所能,而不必购买支持 HTTPS 的主机,这让我想到了我的问题。

是否有任何可靠的方法来防止(或只是检测并提醒用户)中间人替换他们自己的公钥来代替我网站的公钥?或者有什么方法可以验证服务器发送的公钥是否真的是服务器的公钥?如果无法验证这一点,SSL/TLS 是如何工作的,以及它们如何验证密钥(如果 SSL 不使用公钥/私钥,我很抱歉,我对它的理解非常有限)?

我已经明白,与使用 TLS/SSL 相比,仅加密表单数据是一种极其薄弱的做法,并且不会阻止那些决心破坏加密的人这样做,所以请避免任何“你应该使用 HTTPS”-只有评论(如果你知道一个允许 HTTPS 的免费托管服务提供商,我也会很高兴听到他们的消息)

4

1 回答 1

0

SSL 起作用的原因是根证书分布在浏览器中。这个方案有很多问题,但总的来说你有一个信任链——在这种情况下,以浏览器的信任结束(证书存储、分发、安装等)。当任何证书颁发机构私钥不安全时,它就会崩溃,这是目前备受争议的问题。

信任链:

在此处输入图像描述

浏览器证书存储:

在此处输入图像描述

JavaScript 的问题在于您没有(访问)信任库,因此您无法信任收到的密钥。攻击者可以简单地用他自己的密钥替换它(并用他的密钥登录到您自己的站点。这将构成一个典型的中间攻击,你几乎无能为力。

使用公钥加密确实可以保护您免受窃听攻击。不幸的是,大多数一开始就可以访问连接的攻击可能能够创建 MITM,例如在使用 WiFi 接入点时。

尝试找到您的浏览器信任库,您可能可以查看其中分发的已配置根证书。这种证书和私钥的树状结构称为公钥基础设施(所以谷歌它)。

于 2012-08-02T22:15:53.040 回答