【问题标题】:How to transmit password securely if you don't have https (ssl)?如果您没有 https (ssl),如何安全地传输密码?
【发布时间】:2011-03-22 01:19:48
【问题描述】:

如果没有 https (ssl),如何安全传输密码?

【问题讨论】:

  • 还要详细说明为什么不能有https。
  • 我不能拥有 ssl,因为它太贵了。 (tophost.bg/?page=services)
  • 如果您负担不起 SSL,请使用 OpenID 或 OAuth,而不是自己接受密码。

标签: http ssl https security password-protection


【解决方案1】:

摘要式身份验证提供一些保护,尤其是当您的 nonce 生命周期很短且易于实施时。这使得它适用于某些情况下,密码是您唯一需要防止窥探的东西。有关更多信息,请参阅 RFC 2617。

但它仍然不如 HTTPS 安全。

【讨论】:

  • 使用良好的摘要式身份验证可以很好地保护密码传输,但强制在服务器上存储密码的明文,考虑到人们倾向于重用用户名和密码,如果密码数据库遭到破坏,这将是一件非常可怕的事情...
  • @Bruno,这根本不是真的。您只需要存储用户名+“:”+域+“:”+密码的MD5,并且域由您设置(因此不应与存储在另一个系统中的相同MD5匹配)。正是这个摘要用作共享机密,然后在传输时使用随机数再次对其进行摘要。获得这将允许人们访问有问题的系统,但不会给他们原始用户/通行证。
  • 是的,我错了,密码可以以不可逆的方式存储,仍然是最危险的密码存储方式之一。
【解决方案2】:

Secure Remote Password 协议专为这些情况而设计。有一些 JavaScript 实现浮动,应该适合 HTTP 上下文。但请记住,这可以防止有人被动地收听,但不能防止有人干预流量,因为他们可能只会向您的用户发送损坏的 JavaScript。

另外请记住,即使客户端密码不能被泄露,它们也已通过身份验证,除非您注意保护它们,否则它们仍然容易受到中间人的攻击,例如使用SRP Hermetic

Clipperz 应该是适合您目的的优秀 JavaScript SRP 库。

【讨论】:

    【解决方案3】:

    绝对推荐使用 SSL,并且有几个便宜(或免费)的来源可以获得 SSL 证书。但是,如果您绝对不能使用 SSL,则可以使用像 http://www.jcryption.org/ 这样的 JavaScript 加密库。请记住:

    jCryption 在它的当前状态是没有 替换 SSL,因为有 没有身份验证,但主要目标 jCryption 应该是一个非常简单且 快速安装插件,它提供了一个 基本安全级别。

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多