未定义PHP LDAP选项

问题描述:

我正在尝试使用PHP LDAP模块将身份验证层置于组织的某些内容上。如果我将LDAP_OPT_X_TLS_REQUIRE_CERT设置为0,该脚本完美工作,但如果我不这样做,则会出现以下错误。未定义PHP LDAP选项

  • ldap_error()返回“无法绑定到服务器:无法联系LDAP服务器”
  • ldap_get_option()为LDAP_OPT_ERROR_STRING回报“:对方的证书颁发者无法识别TLS错误-8179”。

This page表明可以通过将LDAP服务器的安全证书放在我自己的服务器上来解决Peer的证书错误。我向IT部门请求了PEM。现在我需要确定它放在哪里。

当我尝试通过LDAP_OPT_X_TLS_CACERTDIR打印ldap_get_option(),以获得预期的证书目录,我得到警告“ldap_get_option()预计参数2是整数,字符串中给定”。实际上,当我回显LDAP_OPT_X_TLS_CACERTDIR本身时,结果实际上就是该字符串,而不是整数。

例如:

echo LDAP_OPT_SIZELIMIT . '<br />'; 
echo LDAP_OPT_ERROR_STRING . '<br />'; 
echo LDAP_OPT_X_TLS_CACERTDIR; 
die(); 

结果:

3 
50 
LDAP_OPT_X_TLS_CACERTDIR 

这是每一个LDAP_OPT_X_问题?选项列在the documentation中,但LDAP_OPT_X_TLS_REQUIRE_CERT除外,后者打印为24582.

有谁知道为什么这些选项没有定义?

+0

您使用哪个版本的PHP? – heiglandreas

+0

我们使用的版本是7.0.17 – tkm256

Ldap-Option LDAP_OPT_X_TLS_CACERTDIR在PHP 7.1中引入PHP的LDAP扩展(https://github.com/php/php-src/commit/8e9e89610e2e196892dbb7b605c65923a3fedf87)。所以当你使用PHP 7.0时,没有真正的机会让你自己动手修改PHP源代码。最简单的选择是更新到PHP 7.1

+0

谢谢,我升级到了7.1.4,现在我可以获取并设置选项。 – tkm256

+0

对于遇到此问题的其他人,如果您的PHP是针对OpenLDAP编译的,则还需要查看/etc/openldap/ldap.conf中的TLS_CACERTDIR和TLS_REQCERT –