【问题标题】:ldap_connect() with domain name instead of dcs hostname using ldapsldap_connect() 与域名而不是使用 ldaps 的 dcs 主机名
【发布时间】:2022-12-09 23:26:45
【问题描述】:

我正在从 ldap:// 切换到 ldaps://

在我弄清楚如何使用 ldaps 进行连接并且我不能将 ldaps 与域名而不是主机名一起使用之后,我想知道如何解决这个问题。

那么什么是有效的:

ldap_connect('ldaps://dc1.example.com:636');

什么不起作用:

ldap_connect('ldaps://example.com:636');

虽然 dc1.example.com 是我的第一个 dc 的主机名,但 example.com 是一个 DNS 条目,它解析为我的域控制器的多个 IP。

接下来我做了什么? 使用 openssl 我发现使用 example.com 的 DNS 服务器的答案选择的域控制器将导致 ldap 连接错误。所选域控制器是否使用其主机名证书 (dc1.example.com) 而不是“域”证书 (example.com) 进行应答?我可以使用连接上的 ldap 选项禁用该检查吗?或者有什么其他的建议吗?我不想在连接字符串中列出所有这些域控制器,因为如果其中一个不可用,它将挂起几秒钟。使用域名将“删除”失败的 dc。

【问题讨论】:

  • 所选域控制器是否使用其主机名证书 (dc1.example.com) 而不是“域”证书 (example.com) 进行应答?- 我相信这就是正在发生的事情。理想情况下,应该使用包含 DC 名称和域名的证书更新 DC,但如果您不能这样做,则可以忽略证书错误。看这里:Need help ignoring server certificate while binding to LDAP server using PHP

标签: php ldap


【解决方案1】:

我可以使用连接上的 ldap 选项禁用该检查吗?或者有什么其他的建议吗?

没有禁用选项只是在保持 CA 检查的同时进行主机名验证。您可以通过将选项 X_TLS_REQUIRE_CERT 设置为 0 来禁用所有证书检查——包括主机名检查,还有 CA 验证,但这种做法违背了使用 LDAPS 的目的,所以请不要这样做。

我不想在连接字符串中列出所有这些域控制器,因为如果其中一个不可用,它将挂起几秒钟。使用域名将“删除”失败的 dc。

仅使用标准 AD——不,不会。 example.com 的 IP 地址记录不是由负载均衡器之类的东西即时生成的;它们仍然是静态的,在启动时由 DC 注册,但是不是每当 DC 出现故障时立即删除。 DNS 服务器可能需要相当长的时间来垃圾收集未刷新的 DNS 记录(我相信有效期为 7 天,除非管理员先这样做?)。

因此,您从“example.com”获取的第一个 A 或 AAAA 记录属于当前已关闭的 DC 仍然可能发生,无论如何您都将等待超时。

但是 DC 在“example.com”中注​​册的 DNS 记录不仅仅是 A/AAAA 记录——它们还为 LDAP 服务注册了 SRV 记录,SRV 记录指向域名每个 DC 而不仅仅是 IP 地址——这就是 Windows 本身用来查找域控制器的方法,因为知道确切的主机名不仅对于 TLS 是必需的,而且对于 Kerberos (GSSAPI) 身份验证也是必需的。

$rrset = dns_get_record("_ldap._tcp.example.com", DNS_SRV);

据我所知,Active Directory 没有在 SRV 的 weight 参数中放置任何有用的内容,因此您可以将其视为一个简单的服务器列表:

usort($rrset, fn($a, $b) => $a["pri"] - $b["pri"]);

foreach ($rrset as $rr) {
    try {
        $conn = ldap_connect("ldaps://" . $rr["target"]);
        ldap_set_option, ldap_bind, etc.
        return $conn;
    }
}

(AD 只为“_ldap”而不是“_ldaps”创建 SRV 条目,因此您也必须忽略记录中包含的端口。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2022-11-24
    相关资源
    最近更新 更多