【问题标题】:Connecting to LDAP with MD5 password使用 MD5 密码连接到 LDAP
【发布时间】:2015-03-15 08:42:41
【问题描述】:

我有这个设置来连接到我的 LDAP:

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://urlTomyLDAP:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, name);
env.put(Context.SECURITY_CREDENTIALS, password);

当密码处于“清除”状态时,一切正常。但是这个密码是从网络客户端获取的,它是哈希(使用 JavaScript)。
所以我没有清楚的密码。 是否可以使用我的散列密码配置环境映射?以及如何?

【问题讨论】:

  • 这是不可能的,因为 ldap 需要纯文本密码(未散列)。

标签: java authentication ldap md5


【解决方案1】:

这是不可能的,这样做是错误的。

哈希用于保护明文密码在被访问(例如被管理员)或被盗时不被泄露。因此 LDAP 通常存储用户密码的哈希值。如果有人可以访问存储的 LDAP 密码哈希,则原始用户的密码不可见,因此无法用于身份验证。

如果您接受密码的哈希作为一种有效的身份验证方法,那么访问哈希将使某人能够在不知道原始密码的情况下进行身份验证。

如果您绝对需要在浏览器中完成身份验证,那么将密码的哈希值从 LDAP 传递到客户端并根据 JavaScript 接收到的哈希值验证用户的输入会更安全。在这种情况下,盐是绝对必须的,这确实不是您应该实施安全性的方式。

【讨论】:

    【解决方案2】:

    您似乎不理解散列作为操作。 当您散列字符串时,您无法将其转换回来。

    唯一对散列有意义的事情是将其与另一个散列字符串比较。如果两个散列字符串相同 - 您可以得出结论,两个预散列字符串相同(相等)。

    对于您的特定情况 - 您应该将散列作为安全措施,因为您将无法使用散列密码登录。

    如果您想了解更多信息,请查看this

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2022-12-24
      • 1970-01-01
      • 2012-08-24
      • 2020-02-29
      • 2015-01-13
      • 2011-12-24
      相关资源
      最近更新 更多