Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全远程服务器Windows上的php LDAP绑定失败_Php_Windows_Security_Bind - Fatal编程技术网

安全远程服务器Windows上的php LDAP绑定失败

安全远程服务器Windows上的php LDAP绑定失败,php,windows,security,bind,Php,Windows,Security,Bind,我试图在Windows php本地测试环境中通过安全连接查询远程LDAP服务器。我想我必须正确授予访问权限,因为我可以使用LDAP浏览器应用程序,并且可以很好地连接到远程服务器。另外,如果我使用“telnet remoteserverurl.com 636”,则命令提示符中会显示一个空白屏幕,因此我至少正在连接。但在下面的.php代码中,我在绑定时遇到了一个错误:“php警告:ldap_bind():无法绑定到服务器:无法在线联系ldap服务器…” 同样的代码也适用于Linux服务器。我认为我的

我试图在Windows php本地测试环境中通过安全连接查询远程LDAP服务器。我想我必须正确授予访问权限,因为我可以使用LDAP浏览器应用程序,并且可以很好地连接到远程服务器。另外,如果我使用“telnet remoteserverurl.com 636”,则命令提示符中会显示一个空白屏幕,因此我至少正在连接。但在下面的.php代码中,我在绑定时遇到了一个错误:“php警告:ldap_bind():无法绑定到服务器:无法在线联系ldap服务器…”

同样的代码也适用于Linux服务器。我认为我的本地php环境中缺少某种LDAP库来实现安全的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

有什么想法吗?谢谢

检查您的PHP库

<?php phpinfo() ?>

因为您可以使用LDAP客户端进行连接,所以我希望您的LDAP运行SSL

您是否复制了SSL证书

  • 将服务器证书复制到sys:/php5/cert目录。此位置可在php.ini文件中配置

  • 在ldap_connect调用中,主机名参数使用“ldaps://”前缀,端口号参数使用636值


  • 我让它工作了@s、 贷款人的“回答”(谢谢)指出了一些证书问题,事实上这是一个证书问题。remove LDAP服务器的证书处于过期状态——即使在使用桌面应用程序(SoftTerra LDAP浏览器)连接时,我也收到了一条警告。所以将证书导入到我的Windows证书中——SoftTerra LDAP浏览器应用程序允许我使用该选项。还有,瞧!。SSL LDAP调用正在工作

    **更新:不确定上面的证书是否有用,但这里有一个更具体的东西帮助了我:看起来php LDAP库在寻找某个conf文件;硬编码为:C\OpenLDAP\sysconf\ldap.conf?!因此,我基本上根据这些信息创建了新文件夹,并将ldap.conf文件放入“TLS_REQCERT never”中,这很有帮助!我已经对它进行了测试。如果我要删除这个文件,那么我的安全LDAP查询将不起作用,并且在“绑定”步骤中失败。注意,我对conf中的“从不”很满意,因为这将只在我自己的工作站上

    另请注意,我使用的是运行IIS 7+的Windows 7**


    希望这对其他人有所帮助。

    我知道这比较旧,但最近在windows 2008和2012(IIS 7.x和8.x,PHP 5.6)上使用wordpress 3.x和4.x时遇到了类似的问题

    我为wordpress编写了一个ldap身份验证插件,当时我正试图获得LDAPS(通过端口636的ldap安全性)

    两件事:

  • 当使用PHP LDAPS时,文档说明您只需在LDAP服务器前面加上
    LDAPS://
    。因此ldap的
    server1.domain.com
    应该是
    ldaps://server1.domain.com/
    …注意,连接方法(per)根本不需要传递端口。这与原问题在提交材料中的内容非常相似
  • windows PHP库是硬编码的,用于在
    C:\openldap\sysconf\ldap.conf
    中查找打开的ldap配置文件(
    ldap.conf
  • 创建上面#2中提到的文本文件-这是指向证书存储的地方。创建此文件后,您可以输入
    TLS\u REQCERT never
    …但这意味着不会验证任何证书,并且所有证书都会自动信任(基本上)-应该仅用于测试…决不会用于生产,因为您会破坏部分TLS/SSL安全措施(即,证明您确实在与您认为与您有联系的主机通话)
  • 与不安全的
    TLS_REQCERT never
    选项不同,该选项似乎是互联网上流行的(可能是误导的)建议…获取curl和类似公司使用的公共证书授权列表。这本质上是firefox为公共证书授权信托提供的(也就是说,这就是为什么您可以安装firefox并在没有证书警告的情况下转到等)
  • 删除下载的cacert.pem文件(它只是一个包含大量证书哈希和描述的文本文件)比如说,我把它和我的PHP安装一起放在
    c:\php5\cacert.pem
    中。你的位置可能不同,但是把它放在一个可以访问的地方,因为它是相关的,所以会与PHP内容分组。下面是
    cacert.pem
    文件内容的几个快照,让你了解其中的内容。
  • 编辑
    C:\openldap\sysconf\ldap.conf
    并为命令
    TLS\u CACERT
    添加一行,如图所示。
  • 这将允许您现在像现代web浏览器一样信任公共、有效的证书。请注意,它不会修复内部颁发的或自签名的证书信任问题。但您也可以通过将自己的证书哈希添加到cacert.pem文件中轻松做到这一点
  • 要在cacert.pem文件中添加另一个证书作为受信任的证书,只需获取相关证书的副本(只需将其导出到base64格式的
    .cer
    ——不需要私钥,扩展名也不重要——只需要是散列输出)。如果以正确的格式导出,则可以打开证书文件并查看哈希-它将类似(但不完全相同)到Thawte服务器CA示例的屏幕截图。只需将导出的哈希附加到cacert.pem文件中,它就会被信任。如果你想变得聪明,你可以为私人颁发的证书导入颁发证书-这将信任由导入的证书签名的任何证书。如果有疑问,你可以始终使用JU请不要导入提交的证书
  • 在做了这些更改之后,我发现最好重新启动web服务器(iis管理器->web服务器节点->重新启动选项),这样使用php的所有内容都被重置
  • 为了获得额外的积分,您可以通过编辑php.ini文件为curl实现使用相同的cacert.pem文件