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

PHP使用ldaps连接Active Directory失败但ldap可连接问题求助

问题核心原因及解决方案

1. 先修正ldap_connect的错误写法

PHP官方明确规定:如果ldap_connect的第一个参数传入的是带协议前缀的URI格式字符串,第二个端口参数会完全被忽略,所以你之前填写的636根本没有生效。正确的写法是把端口直接拼接在URI中:

$ldap = ldap_connect('ldaps://server.local:636') or die("Couldn't connect to AD!");

2. 排查ldaps连接失败的常见问题

Ubuntu环境下ldaps连接失败绝大多数和SSL证书校验、依赖配置有关,按以下步骤排查:

  • 先排除网络层面问题
    先在终端执行命令确认636端口可访问,且AD已开启LDAPS服务:
    telnet server.local 636
    如果端口无法连通,先检查服务器防火墙、AD的LDAPS配置是否正常。
  • 确认系统已安装必要依赖
    确保安装了php ldap扩展和ldap工具包:
    sudo apt install php-ldap ldap-utils
    安装完成后重启php-fpm或者apache服务生效。
  • 测试命令行下ldaps是否可连接
    用ldapsearch命令先验证系统级别的ldaps连接是否正常,排除PHP层面问题:
    ldapsearch -x -H ldaps://server.local:636 -D "你的绑定账号DN" -W
    如果命令行可以正常返回结果,再排查PHP配置问题;如果命令行也连接失败,优先调整系统ldap证书配置。

3. 证书校验问题的两种处理方案

测试环境快速跳过证书校验

如果是内部测试环境,不需要严格校验证书,可以选择以下任意一种方案配置:

  • 全局系统级配置:编辑/etc/ldap/ldap.conf,添加以下两行配置:
    TLS_REQCERT never
    TLS_CIPHER_SUITE NORMAL
    
    配置保存后立即生效,无需重启服务。
  • PHP代码级配置:在连接后、绑定操作前添加以下配置:
    // 必须指定使用LDAP v3协议,AD默认要求该版本
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    // 跳过SSL证书校验
    ldap_set_option($ldap, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
    

生产环境正规证书校验方案

如果是生产环境,建议配置证书信任保证安全:

  1. 导出AD服务的CA根证书,保存为PEM格式,上传到Ubuntu服务器的/usr/local/share/ca-certificates/目录
  2. 执行命令更新系统信任证书列表:
    sudo update-ca-certificates
  3. 把/etc/ldap/ldap.conf中的TLS_REQCERT配置改为demand即可。

4. 绑定失败的额外排查点

如果连接成功但绑定还是失败,确认以下配置:

  • 绑定账号的DN格式是否正确,AD的绑定DN通常为用户名@域或者cn=用户名,ou=用户组,dc=server,dc=local格式
  • 账号密码是否正确,AD是否开启了账号锁定、限制登录源IP等策略

内容的提问来源于stack exchange,提问作者John Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:18:03