繁体   English   中英

无法通过 SSL 在 php 中针对 Active Directory LDAP 进行绑定?

[英]Can't bind in php against Active Directory LDAP over SSL?

我们有一个 IIS php 站点,它使用 LDAP 对 Active Directory 进行身份验证,特别是使用 ldap_connect 和 ldap_bind。 这工作正常,但我们正在为挂起的更改做准备,以只允许签名的 LDAP 绑定到 AD。 当我将我的代码更新为我认为应该可以工作的时候,我遇到了身份验证失败,但我无法获取实际的错误代码来帮助进行故障排除。

截至目前,我们的域控制器上禁用了 TLS 绑定,我只想使用超过 636 的 AD SSL 绑定(而不是超过 389 的 TLS)。 我们在 Server 2008 R2 服务器上的 IIS 6.1 上使用 PHP 5.6.30...我们构建了迁移目标,即 IIS 10 和 PHP 7.2 上的 Server 2016,我们看到了相同的结果。 php_openssl 和 php_ldap 是启用的扩展。

这是当前的代码:

    $this->AD_SERVER = $config['AD_SERVER'];
    assert(is_string($password));
    if ($password == "") {
        throw new \SimpleSAML\Error\Error('NOPASSWORD');
    }
    $ldap = ldap_connect($this->AD_SERVER);
    $ldaprdn = 'DOMAINPREFIX' . "\\" . $user;
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    $bind = @ldap_bind($ldap, $ldaprdn, $password);

这工作正常。 此后,使用“ldap_search”和“ldap_get_entries”拉取属性成功。 用户名和密码由尝试进行身份验证的用户提供; 绑定发生在身份验证用户的凭据下。

如果我将第一行更改为以下内容,我只会遇到身份验证失败,不再有描述性错误:

    $this->AD_SERVER = 'ldaps://'.$config['AD_SERVER'].':636';
    assert(is_string($password));
    if ($password == "") {
        throw new \SimpleSAML\Error\Error('NOPASSWORD');
    }
    $ldap = ldap_connect($this->AD_SERVER);
    $ldaprdn = 'DOMAINPREFIX' . "\\" . $user;
    ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 9);
    ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
    $bind = @ldap_bind($ldap, $ldaprdn, $password);

我弄乱了“LDAP_OPT_X_TLS_REQUIRE_CERT”并禁用了其他 tls 东西,但这没关系(我认为不会)。

在域控制器上,对于失败的尝试,我根本看不到 2280-2290 之间的 eventID(我认为这会暴露绑定错误)。 此外,当配置不安全绑定时,我只看到 4776(身份验证尝试),当安全绑定失败时,我根本没有尝试。 我相信存在绑定问题,但是我似乎无法公开任何日志来帮助诊断它。

我发现很多文章都指出如何为 openldap 执行此操作,但我发现几乎没有任何记录 AD LDAP 签名绑定的内容。 我看到很多人表示我们应该切换到 TLS,因为 636 上的 SSL 绑定是一种非标准的 LDAP 事物,仅适用于 AD,但是如果可能,我们真的希望避免这种情况。 任何援助将不胜感激。

在这篇博文中找到了答案: https : //ashleyknowles.net/2011/07/iis-php-and-ldaps-with-active-directory/

以 Base64 X.509 格式导出根 CA

创建 C:\\OpenLDAP\\sysconf\\ 目录树(不要安装 OpenLDAP,只制作文件夹)

将根 CA 证书复制到网络服务器 (C:\\OpenLDAP\\sysconf\\webcert.crt)

使用以下几行创建 C:\\OpenLDAP\\sysconf\\ldap.conf:

TLS_REQCERT 从不

TLS_CACERT c:\\openldap\\sysconf\\webcert.crt

使用 ldap_connect(“ldaps://servername//”) 连接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM