PHP LDAPS连接到AD

时间:2019-12-05 15:59:27

标签: php ssl active-directory ldap centos7

使用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("\r\nCould not connect to LDAP server\r\n");
}

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

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

2 个答案:

答案 0 :(得分:0)

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

仅当DC在常规LDAP端口389上支持TLS时,才真正需要使用ldap_start_tls。在这种情况下,您需要明确指定要使用TLS,因为实际上您可以选择。您无法在端口636上进行选择。documentation for ldap_start_tls中有关于此的评论。

另请参阅documentation for ldap_connect中的“示例#2安全连接到LDAP服务器的示例”。

答案 1 :(得分:0)

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

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

另一件事是,您错误地使用了ldap_connect。您应将端口添加到ldap-uri中,如下所示:ldaps://example.com:636如指定的in the docs。如果您使用LDAP-URL,则将忽略端口参数。