使用 Apache HTTPSever 2.4.x 的活动目录 SASL 身份验证

Posted

技术标签:

【中文标题】使用 Apache HTTPSever 2.4.x 的活动目录 SASL 身份验证【英文标题】:Active directory SASL Authentication using Apache HTTPSever 2.4.x 【发布时间】:2020-09-12 11:14:43 【问题描述】:

2020 年,Microsoft 将解决 CVE-2017-8563 一组不安全的 LDAP 通道绑定和 LDAP 签名默认配置,这些配置存在于 Active Directory 域控制器上,允许 LDAP 客户端与它们通信,而无需强制执行 LDAP 通道绑定和 LDAP 签名。

由于上述更改,不启用或不支持签名的 LDAP 客户端将连接。 如果需要 LDAP 签名,则基于非 TLS 连接的 LDAP 简单绑定将工作。

意味着我们必须将所有 LDAP 应用程序移至端口 636 并切换到 SSL/TLS。当使用 SASLsigning 时,启用或支持签名的 LDAP 客户端将通过端口 389 连接。

因此,现在需要将 LDAP 简单绑定转换为像 DIGEST-MD5 这样的 SASL,并添加对通过 qop 作为“auth-int”进行签名的支持。但是,在大型应用程序中,ldap 身份验证发生在 HTTP Server 级别而不是 java 程序,在我的情况下,它是 Apache HTTPServer 2.4.x。

目前,我在 Apache HTTPServer(Windows 和 Linux 平台)中配置了基本身份验证提供程序,需要用 GSSAPI、GSS-SPNEGO 或 DIGEST 等 SASL 身份验证机制替换-MD5:

# Basic Authentication provider

<AuthnProviderAlias ldap MyEnterpriseLdap>
  AuthLDAPURL "ldap://machine1.abcd.com:389/CN=Users,DC=abcd,DC=com?sAMAccountName?sub?(objectClass=*)"
  AuthLDAPBindDN "CN=rohit,CN=Users,DC=abcd,DC=com"
  AuthLDAPBindPassword "abc123"
  LDAPReferrals Off
</AuthnProviderAlias>

# Authenticated resources

<LocationMatch ^/+WebApp/+(;.*)?>
  AuthName "WebApp"
  AuthType Basic
  AuthBasicProvider MyEnterpriseLdap 
  Require valid-user
</LocationMatch>

我正在寻找以下 3 个带有 Apache 和 Active Directory 的 SASL 选项中的任何一个的 POC 示例:1. DIGEST-MD5 using mod_auth_digest:这个机制在ldap中没有查到,还没有实现qop "auth-int"。还有其他的吗用于digest_md5 的第三方apache 2.4.x 模块将在ldap 中查找并支持qop "auth-int"

2。 GSSAPI mod_auth_gssapi:看起来使用 mod_auth_gssapi Apache HTTPServer 可以在 Active Directory 中查找用户及其凭据,从而使用 GSSAPI 机制进行身份验证。有吗任何文档或 POC 示例说明在 Windows 和 Linux 中为 Apache HTTPServer 2.4.x 进行 GSSAPI 所需的配置,以便使用 Microsoft Active Directory 的 GSSAPI 机制进行身份验证?

3. mod_authn_sasl & Cyrus SASL:现在正在为 Windows 平台发展的第三方库。我正在寻找一个具有任何 SASL 机制的具体文档/POC 示例来实现这个库Apache(Windows 和 Linux 平台)使用 Active Directory。

或者是否有任何其他方法可以为带有 Active Directory 的 Apache HTTPServer 启用 SASL?

另外,检查了SASL LDAP authentication failure(这里使用了 LDAPS)和In apache httpd configuration, what LDAP SASL mechanism is used during ldap authentication?(虽然 Apache 不提供 SASL 作为 OOB 配置,但使用类似 mod_auth_gssapi SASL 之类的模块是可能的)

注意:

1. 应用程序已经支持 LDAP(simple binds) & LDAPS 配置,所以我们不希望用户强行使用 LDAPS。相反,我们希望为非 SSL/TLS 配置启用/实现 SASL 机制。

2. 不能为非 TLS 连接禁用 LDAP 签名,因为当使用带签名的 SASL 时,启用或支持签名的 LDAP 客户端可以通过端口 389 进行连接。

我已详细发布此内容,以便对受 Microsoft 2020 年频道绑定和签名更新影响的其他人有所帮助。

谢谢。

【问题讨论】:

【参考方案1】: Microsoft 早些时候决定在 2020 年注册安全更新,以启用 LDAPChannel 绑定和 LDAP 服务器签名作为默认配置,如下面的屏幕截图所示。

但是,由于客户对此更新和 SASL 限制表示担忧(Apache HTTPServer 等第 3 方身份验证机制不支持)。 Microsoft 现在已回滚此强制执行,并由客户决定是否强制执行这些设置。

此外,Microsoft 还确认未来将没有更多与 LDAPChannel 绑定和 LDAP 服务器签名的实施相关的更新

这是 2020 年 3 月 10 日关于 LDAP 通道绑定和 LDAP 服务器签名的安全更新,这将是这些设置的最后一次更新。

Microsoft 已将其关于安全公告的文章更新如下:ADV190023

强烈建议使用 LDAPS 而不是 LDAP 或任何 SASL 协议。

【讨论】:

以上是关于使用 Apache HTTPSever 2.4.x 的活动目录 SASL 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 RHEL 6.4 上手动构建和安装 Apache 2.4.x

01.WAMP搭建 [Win7+Apache2.4+MySQL5.7+PHP7

在 Amazon EC2 中从 php 5.3 和 apache 2.2 升级到 php 7 和 apache 2.4

多个Apache httpd安全漏洞

CentOS8下使用Apache Httpd创建源服务

编译安装apache2.4.18遇到的问题以及解决办法