OpenLDAP-将用户密码保存为明文

OpenLDAP-将用户密码保存为明文,ldap,openldap,Ldap,Openldap,我正在为我的一个Java应用程序设置openLDAP。用户名和密码存储在openLDAP中,用户可以通过应用程序(使用javax.naming.directory API)更新密码。我将我们的用户从现有的Sun目录服务器导入到openLDAP中。导入成功,密码以SSHA格式加密。我注意到,当我从应用程序更新密码时,它会以“纯文本”格式存储密码。当我通过Apache Directory Studio查看密码时,我可以取消隐藏密码。在谷歌搜索了很多之后,我尝试在slapd.conf文件中设置“pas

我正在为我的一个Java应用程序设置openLDAP。用户名和密码存储在openLDAP中,用户可以通过应用程序(使用javax.naming.directory API)更新密码。我将我们的用户从现有的Sun目录服务器导入到openLDAP中。导入成功,密码以SSHA格式加密。我注意到,当我从应用程序更新密码时,它会以“纯文本”格式存储密码。当我通过Apache Directory Studio查看密码时,我可以取消隐藏密码。在谷歌搜索了很多之后,我尝试在slapd.conf文件中设置“passwordhash{SSHA}”,但这对我也没有帮助。我使用的是windows环境。我正在以纯文本格式将密码传递给openLDAP。代码中没有加密。我知道我可以在应用程序中对其进行加密,但我更希望openLDAP为我进行加密。如果我能在openLDAP方面做些什么,请告诉我

这是我今天用来修改密码的JAVA代码。在过去7年中,这在我们现有的环境中一直运行良好

ModificationItem[] newAttribs = new ModificationItem[1];
Attribute passwordAttrib = new BasicAttribute(DirectoryConstants.USER_PASSWORD, password);
ModificationItem passwordItem = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, passwordAttrib);
newAttribs[0] = passwordItem;

.....
DirContext ctx = this.getContext();
ctx.modifyAttributes( DirectoryConstants.USER_UID + "=" + userId + "," + ou, newAttribs);

因此,openldap中的默认密码哈希格式是SSHA,这很好。 不幸的是,openldap中的默认密码策略是“不强制密码哈希”

您需要向存储用户的数据库添加覆盖。 在cn=config版本中,这大致如下所示:

dn: olcOverlay={X}ppolicy,olcDatabase={Y}bdb,cn=config objectClass: olcPPolicyConfig olcOverlay: {X}ppolicy olcPPolicyHashCleartext: TRUE dn:olcOverlay={X}ppolicy,olcDatabase={Y}bdb,cn=config 对象类:olcppolicycyconfig olcOverlay:{X}政策 olcPPolicyHashCleartext:TRUE (其中Y是cn=config中的数据库号,X是您希望的覆盖号)

slapd.conf版本类似,您需要:

overlay ppolicy ppolicy_hash_cleartext 重叠政策 p策略\u哈希\u明文
条目,位于相关数据库定义内(您不需要为ppolicy\u hash\u cleartext提供值,presence表示TRUE)。

如果他使用密码策略覆盖,他还需要使用扩展密码修改操作。