You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LDAP/PHP在Active Directory中设置/重置用户密码遇问题求助

解决Active Directory设置unicodePwd时"服务器不愿执行此操作"的问题

PHP代码层面需要添加的设置

  • 强制启用TLS加密连接:AD要求密码相关操作必须在加密连接下执行,必须在绑定账号前启动TLS。示例代码:
// 建立LDAP连接
$ldapConn = ldap_connect("ldap://your-ad-server-address");
// 指定使用LDAPv3协议
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);

// 启动TLS加密,这一步必须在ldap_bind之前执行
if (!ldap_start_tls($ldapConn)) {
    die("TLS启动失败: " . ldap_error($ldapConn));
}

// 绑定具有权限的管理员账号
$bindSuccess = ldap_bind($ldapConn, "CN=YourAdmin,OU=Users,DC=yourdomain,DC=com", "AdminPassword");
  • 正确格式化unicodePwd值:AD对密码格式有严格要求,必须用双引号包裹密码,再转换为UTF-16LE编码。示例:
// 注意密码要符合AD的复杂度策略
$rawPassword = "\"StrongPass123!\"";
$unicodePwd = mb_convert_encoding($rawPassword, "UTF-16LE", "UTF-8");

// 创建用户时传入属性
$userAttributes = [
    "samaccountname" => "newuser",
    "givenname" => "New",
    "sn" => "User",
    "unicodePwd" => $unicodePwd,
    "objectclass" => ["top", "person", "organizationalPerson", "user"]
];

ldap_add($ldapConn, "CN=New User,OU=Users,DC=yourdomain,DC=com", $userAttributes);
  • 处理TLS证书验证:如果PHP连接时因为证书验证失败导致TLS启动失败,可以临时关闭验证(生产环境建议配置正确的CA证书):
ldap_set_option($ldapConn, LDAP_OPT_TLS_REQUIRE_CERT, LDAP_OPT_TLS_NEVER);

生产环境下,建议在php.ini中配置ldap.tls_cacert_file指向AD服务器的CA证书文件,确保证书验证通过。

服务器端需要检查的配置

  • 确认LDAP TLS配置有效:在Win2019服务器上,确保AD证书服务已部署,且LDAP服务绑定了有效的SSL证书。可以用Windows自带的ldp.exe工具测试:连接服务器后执行Connection -> Bind,再Connection -> Start TLS,确认TLS连接成功。
  • 检查密码复杂度策略:新密码必须符合AD的密码策略(比如至少8位、包含大小写字母、数字、特殊字符等),不符合策略会直接返回该错误。可以在AD域控制器的组策略管理中查看计算机配置 -> Windows设置 -> 安全设置 -> 账户策略 -> 密码策略。
  • 确认管理员账号权限:虽然使用管理员账号,但要确保该账号拥有创建用户或重置密码的权限(默认域管理员具备该权限,若为自定义账号需检查AD权限设置)。
  • 验证LDAP签名要求:Win2019默认可能启用了LDAP签名要求,确保PHP连接使用的LDAPv3协议符合要求,无需额外修改(已在代码中设置LDAP_OPT_PROTOCOL_VERSION, 3即可)。

内容的提问来源于stack exchange,提问作者homayoun shokri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 08:40:31