0

我有一个 Active Directory 服务器和一个托管 PHP Web 应用程序的 Windows WAMP 服务器,这些应用程序需要能够使用 Kerberos 对 Active Directory 进行身份验证。

我能够使用一些示例 PHP 代码轻松地连接并绑定到 Active Directory 主机,但我不确定如何使用 Kerberos 来做到这一点。我看到许多论坛和博客详细介绍了如何在 *NIX 机器上执行此操作,但这对我的情况没有帮助。

我确实使用 Wireshark 和Fiddler来确认没有发生 Kerberos 或 NTLM 协商。

我用来连接和绑定到 LDAP 的示例代码:

<?php   
   $ldaphost = "example.domain.com";
   $ldapport = 389;
   $ldapuser = "user";
   $ldappass = "password";

    $ldapconn = ldap_connect( $ldaphost, $ldapport )
    or die( "Unable to connect to the LDAP server {$ldaphost}" );

    if ($ldapconn)
    {
        $ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass);

        if ($ldapbind)
        {
            echo "LDAP connection successful";
        }
        else
        {
            echo "LDAP connction failed";
        }
    }
?>

任何帮助将不胜感激,谢谢!

更新:我整天都在为此苦苦挣扎,我认为我需要使用 ldap_sasl_bind(),可能使用 GSSAPI 作为机制......无论我在 ldap_sasl_bind() 中输入什么参数,我都会收到以下错误:'无法绑定到服务器:未知的身份验证方法'

我不确定如何实现 GSSAPI,但我看到的一些示例显示使用 ldap_start_tls(),但我不断收到“无法启动 TLS:服务器不可用”错误。

我不知道是否有人对 ldap_sasl_bind() (PHP 未记录)或 ldap_start_tls 有任何了解,但如果这是我应该走的路,请指出正确的方向。

4

3 回答 3

1

我无法帮助解决 Kerberos 问题,因为我自己仍在努力解决这个问题。但是,我可以为您指出 TLS 的正确方向。TLS 至少会阻止您的凭据以明文形式通过网络传输。TLS 需要正确配置 OpenLDAP。至少,您可以将客户端配置为不请求或检查任何服务器证书。您可以通过将以下行添加到 ldap.conf 配置文件的顶部来执行此操作。

TLS_REQCERT never

您的 ldap.conf 文件应位于C:\C:\openldap\sysconf中,具体取决于您的 PHP 和 OpenLDAP 版本。该文件很可能在您的设置中尚不存在。您也可以通过环境变量设置配置putenv(TLS_REQCERT=never);,但我自己没有尝试过,其他人报告的结果似乎有好有坏。

于 2013-06-06T17:32:46.240 回答
0

您需要做的:确保 PHP 中的 LDAP 接口是针对 SASL 编译的,支持 GSS-API 机制,并且使用 keytabs 或 Windows 自己的 SSPI 接口。祝你好运。

于 2013-06-02T11:49:14.307 回答
0

我通过创建基于 c++ ldap_bind_s 的可执行文件在 Windows 上解决了这个问题。我将此可执行文件用作带有参数的命令行:主机、用户名、密码。这是我让它为 GSSAPI 工作的唯一方法。

WINLDAPAPI ULONG LDAPAPI ldap_bind_s(
  LDAP *ld,
  常量 PSTR dn,
  const PCHAR 信用,
  超长方法
);

我使用了 LDAP_AUTH_NEGOTIATE。

于 2020-07-06T17:03:56.673 回答