0

我正在为我的一个 Java 应用程序设置 openLDAP。用户名和密码存储在 openLDAP 中,用户可以通过应用程序更新他们的密码(使用 javax.naming.directory API')。我将我们的用户从我们现有的 Sun Directory Server 导入到 openLDAP。导入成功,密码以 SSHA 格式加密。我注意到,当我从应用程序更新密码时,它会以“纯文本”格式存储它。当我通过 Apache Directory Studio 查看密码时,我可以取消隐藏密码。后来进行了很多谷歌搜索,我尝试在 slapd.conf 文件中设置“密码哈希 {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);
4

1 回答 1

1

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

您需要在存储用户的数据库中添加一个覆盖。在 cn=config 版本中,这看起来大致如下:

dn: olcOverlay={X}ppolicy,olcDatabase={Y}bdb,cn=config
对象类:olcPPolicyConfig
olcOverlay: {X}ppolicy
olcPPolicyHashCleartext: TRUE

(其中 Y 是您在 cn=config 中的数据库编号,X 是您想要的覆盖编号)

slapd.conf 版本类似,你需要一个:

覆盖策略
ppolicy_hash_cleartext

条目,在相关数据库定义中(您不需要为 ppolicy_hash_cleartext 提供值,存在表示 TRUE)。

于 2013-12-04T00:12:47.023 回答