我试图在Windows的PHP本地testing环境中的安全连接查询远程LDAP服务器。 我想我必须正确地授予访问权限,因为我可以使用LDAP浏览器应用程序并且连接到远程服务器。 另外,如果我做'telnet remoteserverurl.com 636'那么一个空白的屏幕出现在命令提示符,所以我至less连接。 但在我下面的.php代码,我得到一个错误绑定:“PHP警告:ldap_bind():无法绑定到服务器:无法联系LDAP服务器…”
相同的代码在Linux服务器上工作。 我认为在我的本地php环境中存在某种缺lessLDAP库的安全LDAP连接? 无论如何,这里是代码:
$ds=ldap_connect("ldaps://serveraddress.com", "636"); // remote server //$ds=ldap_connect("ldap://localhost", 389); // works //putenv('LDAPTLS_REQCERT=never');//doesn't help with secure ldap //ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //works for local LDAP server (Open LDAP) $r=ldap_bind($ds, "cn=xxx,ou=proxy,o=xxx", "passwordxxxx");//throws error for remote
任何想法? 谢谢!
知道这是旧的,但我最近遇到类似的问题,在Windows 2008和2012(IIS 7.x和8.x,PHP 5.6)上使用WordPress的3.x和4.x。
我已经为wordpress写了一个用于ldap身份验证的插件,正如试图获得LDAPS(通过端口636工作的ldap安全)一样。
夫妇的事情:
ldaps://
。 所以对于LDAPS server1.domain.com
应该是ldaps://server1.domain.com/
…注意你不需要传递连接方法的所有端口(per http://php.net/manual /en/function.ldap-connect.php )。 这与原来提出的问题非常相似。 C:\openldap\sysconf\ldap.conf
查找打开的ldap配置文件( ldap.conf
)。 TLS_REQCERT never
…但这意味着没有任何证书被验证,并且所有的都是自动的 (基本上) – 只能用于测试…永远不会生产 ,因为你击败了TLS / SSL安全的一部分措施(即证明你确实在和你认为你所连接的主人谈话)。 TLS_REQCERT never
选择,似乎是一个受欢迎(也许是误导)的interwebs建议…抓住curl和类似的常见公共证书权威名单 – http://curl.haxx.se/ca/ cacert.pem 。 这基本上就是firefox自带的公共证书授权信任(也就是为什么你可以安装firefox,没有证书警告就去https://amazon.com等等)。 c:\php5\cacert.pem
。 您的位置可能会有所不同,但将其放置在可以访问的地方,并将与PHP的东西分组,因为它是相关的。 下面是一些cacert.pem
文件的内容,让你知道里面的内容。 C:\openldap\sysconf\ldap.conf
并为图中所示的TLS_CACERT
命令添加一行。 .cer
格式的base64格式 – 不需要私钥和扩展名)这个问题 – 只需要是一个散列输出)。 如果您已经以正确的格式导出它,您可以打开证书文件并查看散列 – 它与Thawte server CA示例的截图类似(但不完全相同)。 只需将您导出的散列追加到cacert.pem文件中,它就会被信任。 如果你想要聪明,你可以导入你的私人签发的证书的签发证书 – 这样就可以信任由导入的证书签署的任何证书。 如果有疑问,你可以随时导入证书。 curl.cainfo =
行中。 检查你的PHP库
<?php phpinfo() ?>
既然你可以连接使用LDAP客户端,我希望你的LDAP运行SSL
你有没有复制你的SSL证书?
将服务器证书复制到sys:/ php5 / cert目录。 这个位置可以在php.ini文件中配置。
在主机名参数中使用“ldaps://”前缀,或在ldap_connect调用中为端口号参数使用值636。
我得到了这个工作! @ s.lenders的“答案”(谢谢)指出了一些证书问题,事实上这是一个证书问题。 删除LDAP服务器的证书处于过期状态 – 即使使用桌面应用程序(SoftTerra LDAP Browser)连接,我也会收到警告。 所以导入证书到我的Windows证书 – SoftTerra LDAP浏览器应用程序允许我这个选项。 而且,瞧! SSL LDAP调用正在工作。
**更新:不知道上面的证书thingy是否帮助,但这里有一些更具体的帮助我:它看起来像PHP LDAP库寻找一个特定的conf文件; 硬编码为:C \ OpenLDAP \ sysconf \ ldap.conf? 所以我基本上根据这个信息创建新的文件夹,并把一个ldap.conf文件除了'TLS_REQCERT永不',这有帮助! 我测试了它..如果我要删除这个文件,那么我的安全LDAP查询不起作用,并在“绑定”步骤失败。 请注意,我对我的conf中的'never'很满意,因为这只会在我自己的工作站上。
另外请注意我在运行IIS 7+的Windows 7上
希望这有助于某人。