如何使用java在ldap服务器中存储密码

如何使用java在ldap服务器中存储密码,java,Java,我需要使用java代码在ldap服务器中存储密码。在存储密码时,我必须指定ldap中可用的任何加密方法。如何操作???1)将密码存储在char[]中,而不是字符串中 字符串在Java中是不可变的,您无法删除字符串的内容,因为字符串中的任何修改 将生成一个新字符串。此外,字符串缓存在字符串池中,这会给任何有权访问java应用程序内存的人带来明文密码的安全风险。即使是像java应用程序的内核转储这样的意外事件,在/tmp中生成内存转储也会给密码带来真正的威胁。通过使用char[],您可以通过将其设置

我需要使用java代码在ldap服务器中存储密码。在存储密码时,我必须指定ldap中可用的任何加密方法。如何操作???

1)将密码存储在char[]中,而不是字符串中 字符串在Java中是不可变的,您无法删除字符串的内容,因为字符串中的任何修改 将生成一个新字符串。此外,字符串缓存在字符串池中,这会给任何有权访问java应用程序内存的人带来明文密码的安全风险。即使是像java应用程序的内核转储这样的意外事件,在/tmp中生成内存转储也会给密码带来真正的威胁。通过使用char[],您可以通过将其设置为空或任何其他字符来删除修道院,从而降低公开密码的安全风险。有关详细信息,请参见为什么在Java中存储密码时char数组优于String

2) 在应用程序中始终使用加密密码 这比前面的技巧更进一步,它不是以明文形式存储密码或敏感信息,而是始终以加密或哈希格式存储它们。这降低了在您执行身份验证时向任何有权访问应用程序内存的陌生人公开密码的风险

阅读更多:


我想我们不想指定..它会自动加密到ldap配置中

当您通过JNDI在ldap中插入一个新条目时,您需要通过提供其所有对象层次结构来创建该条目。对于inetOrgPerson,密码位于名为userPassword的属性中(核心架构中“person”对象中的可选属性)

您必须根据模式(包括元属性,如名称、SUP、结构等,请参考URL了解模式结构)在您的案例中创建许多属性(在BasicAttributes对象中),核心和inetOrgPerson模式:

准备好对象后,请单击user context.rebind


注意:所有LDAP实现都不同,您可能会得到一些意外的结果。例如,在上述方法中,您将在Apace DS中的绑定对象中获得其他属性(非LDAP操作属性)。解决方法是使用Apache LDAP API(请参阅:)。在MS ActiveDirectory中,您可能会面临其他问题。JNDI很适合读取条目,但不适合写入/放入条目
new BasicAttribute("password", passValue)