使用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工具进行连接,连接成功,这意味着我消除了证书问题。感谢您提出解决此问题的想法,谢谢
答案 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,则将忽略端口参数。