php7 ldap 通过 TLS 连接和绑定
php7 ldap connect and bind via TLS
我有这个简单的 php 文件:
$ldap="localhost";
$port=636;
$usr="CN=admin";
$pwd="pwd123";
$ds=ldap_connect("$ldap", $port);
$ldapbind=false;
// for debugging
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
if(ldap_set_option($ds, LDAP_OPT_X_TLS_REQUIRE_CERT, 0))
if(ldap_set_option($ds, LDAP_OPT_REFERRALS, 0))
if(ldap_start_tls($ds))
$ldapbind = @ldap_bind($ds, $usr, $pwd);
ldap_close($ds);
if(!$ldapbind)
echo "BIND ERROR!\n";
else
echo "BIND OK!\n";
我尝试在本地主机上连接和绑定 ldap 服务器。 (命令:php testcon.php
)。我也将 TLS_REQCERT never
行添加到 /etc/ldap.conf。
但是我得到了 BIND ERROR! 结果。此外,我也收到了警告消息:
PHP Warning: ldap_start_tls(): Unable to start TLS: Can't contact LDAP server in /root/testfolder/testcon.php on line 16
如果我注释掉 16. 行,我不会收到任何警告,但 BIND ERROR! 仍然存在。
更多信息:
- PHP 版本:PHP 7.2.5
- 服务器:openSUSE Leap 15.0
- ldap: 活动目录 2.4.46-lp150.7.1
- 所需的 php 库已安装
我尝试使用 basedn 和不使用 base dn(结果相同)。
Can't contact LDAP server
这可能意味着两件事:
- 无法通过网络访问服务器或
- 由于证书验证错误,无法建立 TLS 连接
错误信息
ldap_start_tls(): Unable to start TLS
有点误导,因为在使用 ldap_connect()
初始化上下文后,TCP 连接仍未建立。第一个真正的 LDAP 操作称为 ldap_start_tls()
在您的例子中,是打开 TCP 连接。
我会推荐:
- 在同一台机器上使用 CLI 工具
ldapwhoami
检查是否可以连接
- 不要关闭证书验证 即使是测试
根据对问题的评论,因为它最终成为答案:
将端口更改为 389。端口 636 用于基于 SSL 的 LDAP,已弃用(实际上从未标准化为 LDAP 的一部分)。 LDAP 从端口 389 工作,当您发出 StartTLS(使用 ldap_start_tls())时,它会加密连接。
我有这个简单的 php 文件:
$ldap="localhost";
$port=636;
$usr="CN=admin";
$pwd="pwd123";
$ds=ldap_connect("$ldap", $port);
$ldapbind=false;
// for debugging
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
if(ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3))
if(ldap_set_option($ds, LDAP_OPT_X_TLS_REQUIRE_CERT, 0))
if(ldap_set_option($ds, LDAP_OPT_REFERRALS, 0))
if(ldap_start_tls($ds))
$ldapbind = @ldap_bind($ds, $usr, $pwd);
ldap_close($ds);
if(!$ldapbind)
echo "BIND ERROR!\n";
else
echo "BIND OK!\n";
我尝试在本地主机上连接和绑定 ldap 服务器。 (命令:php testcon.php
)。我也将 TLS_REQCERT never
行添加到 /etc/ldap.conf。
但是我得到了 BIND ERROR! 结果。此外,我也收到了警告消息:
PHP Warning: ldap_start_tls(): Unable to start TLS: Can't contact LDAP server in /root/testfolder/testcon.php on line 16
如果我注释掉 16. 行,我不会收到任何警告,但 BIND ERROR! 仍然存在。
更多信息:
- PHP 版本:PHP 7.2.5
- 服务器:openSUSE Leap 15.0
- ldap: 活动目录 2.4.46-lp150.7.1
- 所需的 php 库已安装
我尝试使用 basedn 和不使用 base dn(结果相同)。
Can't contact LDAP server
这可能意味着两件事:
- 无法通过网络访问服务器或
- 由于证书验证错误,无法建立 TLS 连接
错误信息
ldap_start_tls(): Unable to start TLS
有点误导,因为在使用 ldap_connect()
初始化上下文后,TCP 连接仍未建立。第一个真正的 LDAP 操作称为 ldap_start_tls()
在您的例子中,是打开 TCP 连接。
我会推荐:
- 在同一台机器上使用 CLI 工具
ldapwhoami
检查是否可以连接 - 不要关闭证书验证 即使是测试
根据对问题的评论,因为它最终成为答案:
将端口更改为 389。端口 636 用于基于 SSL 的 LDAP,已弃用(实际上从未标准化为 LDAP 的一部分)。 LDAP 从端口 389 工作,当您发出 StartTLS(使用 ldap_start_tls())时,它会加密连接。