JNDI LDAP 身份验证需要将明文密码 (Context.SECURITY_CREDENTIALS) 传递给几乎所有安全机制(或者至少是我的理解)。看起来是这样设计的,密码源自当前的 JVM。但是如果密码必须从另一台机器发送呢?这种方法迫使它以可恢复的方式发送(最简单的是明文),安全性很低。
更具体地说,让我们考虑一个 3 层设置:客户端、java 服务器和 LDAP 服务器。用户在客户端输入用户名和密码,该用户名和密码被发送到java服务器。然后,java 服务器与 LDAP 服务器通信以授权这些凭证。有没有办法让客户端到java服务器的传输安全呢? 据我所知,我们可以使用 SSL 或其他方式来保护 channel 本身的安全,但我们必须通过此(甚至是安全的) channel 以可恢复的方式发送密码,这仍然是不好的。
我试图寻找答案,但看起来大多数人都考虑采用两层设置。还有一些 3d 方 java 库建议(而不是 JNDI),但不清楚它们是否可以处理我的任务。如果他们确实这样做了,您能否举一个利用它们来完成我的任务的例子?
我的目标平台是 Delphi XE3 客户端、Java SE 6 服务器和 AD LDAP。但我也对更理论化的讨论感兴趣,而不仅仅局限于这些具体的客户端和 LDAP。
最佳答案
This approach forces it to be sent in a recoverable fashion (the most simple is cleartext) with little security.
该方法要求您使用 SSL。就这么简单。
关于使用非明文密码进行 Java LDAP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18685947/