【问题标题】:How to perform a LDAP SASL bind to Active Directory using GSS-API mech in PHP from Windows?如何在 Windows 的 PHP 中使用 GSS-API mech 执行 LDAP SASL 绑定到 Active Directory?
【发布时间】:2020-07-07 01:03:56
【问题描述】:

我有一个 Active Directory 服务器和一个 Windows WAMP 服务器托管 PHP Web 应用程序,它们需要能够使用 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 的任何信息,但如果我应该这样做,请指出正确的方向。

【问题讨论】:

    标签: php active-directory ldap wamp kerberos


    【解决方案1】:

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

    TLS_REQCERT never
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        我使用了 LDAP_AUTH_NEGOTIATE。

        【讨论】:

          猜你喜欢
          • 2019-04-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-21
          • 1970-01-01
          • 1970-01-01
          • 2011-08-18
          相关资源
          最近更新 更多