2012-08-02 166 views
1

我目前正在使用不允许https连接的免费主机,由于我的网站没有托管任何敏感或私人内容,因此我不会升级到付费托管服务具有。但是由于我的网站确实处理密码,并且由于许多用户对不同的网站使用相同的密码,我希望在处理这些密码时提供合理的安全/加密数量。使用Javascript/PHP验证公共密钥

Secure login: public key encryption in PHP and Javascript,看起来最大的问题在使用密码的公钥/私钥加密技术来保护它,当它通过网络发送的将是一个攻击者可以修改发送到客户端的公钥,然后拦截加密的密码,用攻击者的私钥解密,然后使用该站点的公钥将其加密,然后将其发送到站点,实质上首先破坏了加密它的整个点。

当然,任何加密都比不加密更好,但是我希望尽我所能无需购买支持HTTPS的托管服务,这使我能够回答我的问题。

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

我已经明白,与使用TLS/SSL相比,加密表单数据是一项极其薄弱的做法,并且不会阻止那些决定破解加密的人,因此请避免出现任何“你应该使用HTTPS“ - 只有评论(尽管如果你知道一个免费的托管服务提供商,允许HTTPS,我会更乐意听到他们)

+1

我还没有尝试过,但这已经出现了几次:http://www.switchonthecode.com/tutorials/secure-authentication-without-ssl-using-javascript – Brad 2012-08-02 20:26:26

+1

[This](http:///security.stackexchange.com/questions/1322/can-you-secure-a-web-app-from-firesheep-without-using-ssl)可能会有所帮助。 (从security.stackexchange.com链接)。 – Matt 2012-08-02 20:27:29

+0

谢谢布拉德和马特 - 我会看看那些:) – MatthewSot 2012-08-02 20:35:41

回答

0

SSL工作的原因是根证书分布在浏览器。这个方案存在很多问题,但总的来说,你有一个信任链 - 在这种情况下,以浏览器的信任(证书存储,分发,安装等)结束。当任何证书授权机构私钥不安全并且这是当前一个备受争议的问题。

信任链:

enter image description here

浏览器证书存储区:

enter image description here

与JavaScript的问题是,你没有(获得)信任存储,所以你无法相信你收到的钥匙。攻击者可以简单地用他自己的密钥替换它(并且用他的密钥登录到你自己的站点)。这将成为中间进攻中的经典人,而且你对此可以做的很少。

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

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

+0

谢谢,这是一个很好的阅读:) – MatthewSot 2012-08-02 23:53:20

+0

不客气... – 2012-08-02 23:59:49