我正在为我的一个Java应用程序设置openLDAP。用户名和密码存储在openLDAP中,用户可以通过应用程序更新其密码(使用javax.naming.directory API')。我将用户从现有的Sun Directory Server导入openLDAP。导入成功,密码以SSHA格式加密。我注意到,当我从应用程序更新密码时,它以“纯文本”格式存储。当我通过Apache Directory Studio查看密码时,我可以取消隐藏密码。很多谷歌搜索后,我尝试在slapd.conf文件中设置“password-hash {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);
答案 0 :(得分:1)
因此,openldap中的默认密码哈希格式是SSHA,这很不错。 不幸的是,openldap中的默认密码策略是“不强制密码散列”。
您需要为要存储用户的数据库添加叠加层。 在cn = config版本中,这看起来像是:
dn: olcOverlay={X}ppolicy,olcDatabase={Y}bdb,cn=config objectClass: olcPPolicyConfig olcOverlay: {X}ppolicy olcPPolicyHashCleartext: TRUE
(其中Y是cn = config中的数据库编号,X是您希望它的覆盖编号)
slapd.conf版本类似,你需要:
overlay ppolicy ppolicy_hash_cleartext
条目,在相关数据库定义内(您不需要为ppolicy_hash_cleartext提供值,在线表示为TRUE)。