我正在尝试使用 PHP LDAP 模块在我组织的某些内容上放置一个身份验证层。如果我将 LDAP_OPT_X_TLS_REQUIRE_CERT 设置为 0,该脚本将完美运行,但如果不设置,我将收到以下错误。
- > ldap_error()返回“无法绑定(bind)到服务器:无法联系 LDAP 服务器”
- > ldap_get_option()对于 LDAP_OPT_ERROR_STRING 返回“TLS 错误 -8179:无法识别对等方的证书颁发者。”
This page建议通过将 LDAP 服务器的安全证书放在我自己的服务器上来解决 Peer's Certificate 错误。我向 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。
有谁知道为什么没有定义这些选项?
最佳答案
Ldap 选项 LDAP_OPT_X_TLS_CACERTDIR 在 PHP 7.1 中引入到 PHP LDAP 扩展 (https://github.com/php/php-src/commit/8e9e89610e2e196892dbb7b605c65923a3fedf87)。因此,当您使用 PHP 7.0 时,如果不自己破解 PHP-Sources,就没有机会启动并运行它。最简单的选择是更新到 PHP 7.1
关于未定义 PHP LDAP 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43379303/