2013-04-08 112 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