2013-04-08 116 views
0

我正在为我的一个Java应用程序设置openLDAP。用户名和密码存储在openLDAP中,用户可以通过应用程序更新密码(使用javax.naming.directory API)。我将我们的用户从现有的Sun Directory Server导入到openLDAP中。导入成功,密码以SSHA格式加密。我注意到,当我从应用程序更新密码时,它以“纯文本”格式存储它。当我通过Apache Directory Studio查看密码时,我可以取消隐藏密码。大量的搜索后,我试图在slapd.conf文件中设置“密码哈希{SSHA}”,并没有帮助我。我在一个Windows环境。我传递密码以纯文本格式打开LDAP。代码中没有加密。我知道我可以在应用程序中加密它,但我更愿意使用openLDAP来为我做。请让我知道我是否可以在openLDAP方面做任何事情。OpenLDAP - 将userPassword另存为PlainText

这是我今天用来修改密码的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); 

回答

1

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

您将要覆盖添加到您所存储的用户数据库 在CN =配置版本,这个样子,大约:

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

(其中Y是在你的数据库数量CN =配置,X是你希望它是)

slapd.conf的版本是相似的覆盖数量,你需要:

overlay ppolicy 
ppolicy_hash_cleartext 

时,相关d内数据库定义(您不需要为ppolicy_hash_cleartext提供值,presence指示为TRUE)。

+0

如果他使用密码策略覆盖,他还需要使用扩展密码修改操作。 – EJP 2013-12-04 00:31:35