我有一个外部Web服务器试图通过LDAP对内部服务器上的Active Directory进行身份验证。我能够在本地连接和验证,但使用相同的代码(切换主机和端口)无法在外部进行身份验证。我们还有其他能够连接和验证的服务,例如Attask(http://www.attask.com/)。
外部服务器目前是运行PHP 5.3.15的Media Temple上的Linux(gs),启用了LDAP支持。
内部服务器当前是带有LDAP和Active Directory的Windows Server 2008框。
下面的代码是我正在使用的当前PHP能够在本地连接,但在外部服务器上有问题。它基本上使用PHP LDAP连接字符串并尝试绑定。如果失败,它会尝试匿名绑定。这两个都不在外部工作并返回错误:无法联系LDAP服务器。
<?php
$username = 'username';
$password = 'password';
$ldapconfig['host'] = '00.000.000.000';
$ldapconfig['port'] = '636';
$ldapconfig['basedn'] = 'dc=client,dc=eqc,dc=local';
$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 10);
$dn="".$username."";
if ($bind=ldap_bind($ds, $dn, $password)) {
echo("Login correct");
} else {
echo("Unable to bind to server.</br>");
echo("msg:'".ldap_error($ds)."'</br>".ldap_errno($ds)."");
if ($bind=ldap_bind($ds)) {
$filter = "(cn=*)";
if (!($search=@ldap_search($ds, $ldapconfig['basedn'], $filter))) {
echo("Unable to search ldap server<br>");
echo("msg:'".ldap_error($ds)."'</br>");
} else {
$number_returned = ldap_count_entries($ds,$search);
$info = ldap_get_entries($ds, $search);
echo "The number of entries returned is ". $number_returned."<p>";
for ($i=0; $i<$info["count"]; $i++) {
var_dump($info[$i]);
}
}
} else {
echo("Unable to bind anonymously<br>");
echo("msg:".ldap_error($ds)."<br>");
}
}
?>
一些注意事项:
外部LDAP服务器正在使用LDAPS,因此建议的主机是端口636上的ldaps://00.000.000.000
我已尝试使用'username'以及'username@00.000.000.000'绑定
有防火墙,但是,外部服务器可以成功ping内部LDAP服务器,因此在该级别上发生了连接。
非常感谢任何帮助。如果有服务器设置或那种性质的东西,很想知道。另外,我已经检查了ADFS虽然找不到一个简单的脚本来设置测试而不花费很多时间,如果它不起作用。
答案 0 :(得分:1)
当使用Linux框中的LDAPS连接到AD时,我总是需要添加行
TLS_REQCERT never
/etc/ldap.conf中的或等效的(可能需要重启apache - 不确定)。您也可以尝试使用主机格式“ldaps://server.domain.tld:636”,但我不认为这是问题所在。
我在http://en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP找到了一些不错的文档,虽然它现在似乎已经失效了。 Google的缓存版本:http://webcache.googleusercontent.com/search?q=cache:http://en.gentoo-wiki.com/wiki/Active_Directory_Authentication_using_LDAP
答案 1 :(得分:0)
您是否检查过它是否是SSL证书错误?您使用的是自签名证书还是官方证书?
“如果您正在使用SSL(例如ldaps)并且ldap_bind正在抛出'无法绑定到服务器:'错误,请检查ldap_connect中使用的主机名是否与LDAP服务器上的SSL证书中的”CN“匹配” Source