【问题标题】:Verifying public key with Javascript/PHP使用 Javascript/PHP 验证公钥
【发布时间】:2012-07-31 21:03:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我没试过,但出现过几次:switchonthecode.com/tutorials/…
  • This 可能会有所帮助。 (来自 security.stackexchange.com 的链接)。
  • 感谢 Brad 和 Matt - 我会看看那些 :)

标签: php javascript encryption


【解决方案1】:

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

信任链:

浏览器证书存储:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-26
    • 2022-12-20
    • 2016-04-17
    • 2014-05-11
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    相关资源
    最近更新 更多