2011-01-27 394 views
4

据我所知,在PHP中,我们需要通过SSL连接LDAP以更改用户密码。LDAP更改用户密码

有没有另一种方式,E.G,其他语言(JAVA/ASP)更改LDAP密码而不需要SSL?

谢谢。

更新: 当我尝试修改自我帐户密码时,出现“Warning:ldap_mod_replace()[function.ldap-mod-replace]:Modify:Insufficient access”。 如果我尝试更改其他用户密码,则不会收到错误消息,但密码仍然保留原来的密码。

+2

这可能取决于您使用的LDAP服务。 – 2011-01-27 02:47:07

回答

4

许多LDAP实现确实需要SSL或TLS才能更改/设置密码。这是由LDAP服务器设置的要求,而不是用于访问它的语言。更改语言不会允许您覆盖此特定的服务器要求。

我知道有些情况下你可能无法建立SSL/TLS连接,但一般情况下,你绝对想要加密这样的密码功能 - 即使服务器不需要它。

编辑:我敢打赌,答案可以在slapd日志中找到。还值得查看ACL:OpenLDAP Software 2.4 Administrator's Guide, Section 8. Access Control

+0

我知道一个允许用户重置/更改密码的软件,虽然我的当前LDAP没有启用SSL。 http://www.manageengine.com/products/self-service-password/index.html – neobie 2011-01-31 05:39:43

+0

@neobie也许我误解了你的问题。这听起来像是你想绕过你的ldap服务器规定的ssl要求。我很高兴你能工作! – xelco52 2011-01-31 06:37:00

3

该目录将密码值存储在用户 条目的userPassword属性中。根据服务器的访问控制设置,用户可以根据您指定的密码策略,使用 标准工具(例如ldapmodify)设置userPassword的 值。

 
ldapmodify -h host -p port -D "cn=Directory Manager" -w password 
dn: uid=bjensen,ou=People,dc=example,dc=com 
changetype: modify 
replace: userPassword 
userPassword: ChAnGeMe 
1

您使用OpenLDAP或Active Directory吗?他们都需要一个安全的连接来让你改变你的密码。

您不能使用ldap_mod_replace使用PHP更改您的Active Directory密码,如果您不是管理员,则必须使用ldap_modify_batch。

请看:https://msdn.microsoft.com/en-us/library/cc223248.aspx

如果使用替代(你不把你的旧密码)只有管理员可以更改密码。但是,如果您使用删除(使用旧密码)和添加(使用新密码)的批次,则用户可以更改他/她自己的密码:http://php.net/ldap-modify-batch

1

ldappasswd实用程序。例如

ldappasswd -H ldap://ldap.example.com:389 -D "uid=account-name,ou=serviceaccounts,dc=example,dc=com" -S -W -ZZ 

如果返回referral,那么您需要尝试使用该服务器。通常当有一个主服务器和多个只读服务器时。

0

实际上,您可以在PHP中执行此操作,但不使用PHP COM扩展名的SSL/TLS连接(但使用COM表示您需要为您的应用程序使用Windows操作系统)。

使用COM还旁路您的AD服务器的密码策略复杂性要求(不知道为什么)。

$dn = 'cn=John Doe,dc=acme,dc=org'; 

$ldap = new COM('LDAP:'); 

$user = $ldap->OpenDSObject('LDAP://ACME-DC01.corp.acme.org/'.$dn, 'admin-username', 'admin-password', 1); 

$user->SetPassword('NewPassword'); 

$user->SetInfo(); // Saved