PHP LDAPS connection to AD



使用 PHP 7.4 通过 SSL 连接到 Windows AD

$ldaphost = "ldaps://...";
$ldapUsername  = "CN=supervisor,OU=test_Users,DC=test,DC=org";
$ldapPassword = "xxxx";

$ds = ldap_connect($ldaphost,636);
echo $ds;
if (!ldap_start_tls($ds)) {
print "Could not start secure TLS connection";
}else {
// now we need to bind to the ldap server
$bth = ldap_bind($ds, $ldapUsername, $ldapPassword) or die("rnCould not connect to LDAP serverrn");
}

错误: ldap_start_tls((: 无法启动 TLS:无法联系 LDAP 服务器

调试后 :ldap_connect 按预期返回 id 进程。我尝试使用 GUI 工具连接并且连接成功,这意味着我消除了证书问题。我感谢任何解决此问题的想法,谢谢

您应该使用ldapsTLS。到目前为止,首选方法是根据LDAPv3的TLS。因此,您将使用ldap://连接到不安全的后端,然后调用ldap_start_tls作为第一个命令(可能在一些ldap_set_option调用之后(,但绝对是在调用ldap_bind之前。

您的问题可能是,从有问题的机器到LDAP服务器的连接根本不起作用。由于ldap_connect实际上并没有连接,而只是创建一个可用于执行实际连接的句柄,因此连接错误通常在需要实际连接的第一次调用中出现(在您的情况下ldap_start_tls(。因此,请检查您的服务器是否确实可以从相关计算机在给定端口上访问,例如通过调用telnet servernameOrIp port或使用 cli-ldap-tool

另一件事是,您错误地使用ldap_connect。您应该像这样将端口添加到 ldap-uri 中:ldaps://example.com:636文档中指定的那样。如果使用 LDAP-URL,则会忽略端口参数。

如果您已经指定了ldaps://,则不需要使用ldap_start_tls。只需继续您的ldap_bind.

仅当您的 DC 在正常 LDAP 端口 389 上支持 TLS 时,才真正需要使用ldap_start_tls。在这种情况下,您需要显式指定要使用 TLS,因为您实际上可以选择。在端口 636 上没有选择。在ldap_start_tls的文档中对此有评论。

另请参阅文档中的"示例 #2 安全连接到 LDAP 服务器的示例"以了解ldap_connect

最新更新