安全LDAP可用于PHP CLI,但不能通过apache

安全LDAP可用于PHP CLI,但不能通过apache,php,apache,ldap,command-line-interface,Php,Apache,Ldap,Command Line Interface,我正在尝试通过安全LDAP对另一个Debian box中的Debian服务器进行身份验证 以下代码在命令行中工作(打印“Success”): …通过Apache/mod_php拉取相同的文件会打印“无法联系LDAP服务器” 在stackoverflow上还有一个类似的问题,但它的答案对我来说并不适用。我已经尝试在apache中使用与cli相同的php.ini,但问题仍然存在。我们刚刚遇到了这个问题。事实证明,我们所要做的就是重新启动Apache 我不知道原因是什么(我不管理服务器),但很可能是安

我正在尝试通过安全LDAP对另一个Debian box中的Debian服务器进行身份验证

以下代码在命令行中工作(打印“Success”):

…通过Apache/mod_php拉取相同的文件会打印“无法联系LDAP服务器”


在stackoverflow上还有一个类似的问题,但它的答案对我来说并不适用。我已经尝试在apache中使用与cli相同的php.ini,但问题仍然存在。

我们刚刚遇到了这个问题。事实证明,我们所要做的就是重新启动Apache


我不知道原因是什么(我不管理服务器),但很可能是安全更新。

我终于能够解决我自己的问题,我想与您分享我的解决方案:

我正在为LDAP服务器使用自签名证书,因此有必要创建自己的ca证书并将其导入客户端的证书存储以建立信任。 当我以用户root的身份从cli运行上述脚本时,apache以www-data的身份运行。 我自制的ca Certificate的权限设置为400,其用户设置为root,因此只有root才能读取它


这阻止了apache上的php(作为www数据运行)与我的LDAP服务器建立连接。一旦我将ca证书的权限更改为444,一切都很顺利…

您确定CLI和apache模块使用的是同一个LDAP模块吗?查看两侧的phpinfo()输出并查找ldaps支持它们确实使用相同的模块…在
phpinfo()
-输出中,您能否在CLI和apache模块的协议部分找到
ldaps
?我花了一个小时试图弄清楚-认为您的答案只是懒惰的管理。结果证明我也很懒,并把它作为最后的努力来尝试,结果成功了!谢谢你的回答。奇怪的是,对我来说正确的解决方案。。。事实证明,macOS上的“SudoApacheCtl重启”是有效的。谢谢
if($ldap = ldap_connect('ldaps://myserver.tld'))
{
  ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
  $bind = ldap_bind($ldap,'cn=admin,dc=myserver,dc=tld','mypassword');
  print ldap_error($ldap);
}