使用Javascript / PHP验证公钥

时间:2012-08-02 20:20:32

标签: php javascript encryption

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

Secure login: public key encryption in PHP and Javascript开始,在通过网络发送密码时,使用密码的公共/私有加密来保护它的最大问题是攻击者可以修改发送给客户端的公钥,以及然后拦截加密的密码,用攻击者的私钥对其进行解密,然后用站点的公钥对其进行加密,然后将其发送到站点,实质上首先打败了加密密码的全部内容。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

信任链:

enter image description here

浏览器证书商店:

enter image description here

JavaScript的问题在于您没有(访问)信任存储,因此您无法信任您收到的密钥。攻击者可以简单地用自己的密钥替换它(并使用他的密钥登录到您自己的站点)。这将成为中间攻击中的经典人物,你可以做的事情很少。

使用公钥加密确实可以为您提供一些防范窃听攻击的保护。不幸的是,大多数可以首先访问连接的攻击可能会创建一个MITM,例如:使用WiFi接入点时。

尝试找到您的浏览器信任库,您可以查看在其中分发的已配置的根证书。证书和私钥的这种树结构称为公钥基础结构(Google it)。