我们通过将 AD 添加为 OpenLDAP 的从属,使用 OpenLDAP 服务器作为 AD 的代理。
我已经使用 StartTLS 连接保护了 OpenLDAP 流量,现在我被告知使用 LDAPS 协议进行绑定,我们用它来连接到 AD 服务器(我们使用简单绑定)。
所以我的问题是,由于 OpenLDAP 已经在使用 StartTLS,是否有必要使用 LDAPS 与 AD 进行通信?
我对于 OpenLDAP 和 AD 不太了解,所以只是想得到一些建议。
我使用以下配置来添加后端 ldap [轻量级目录访问协议(代理)后端] 数据库。
dn: olcDatabase=ldap,cn=config
objectClass: olcDatabaseConfig
objectClass: olcLDAPConfig
olcDatabase: ldap
olcSuffix: ou=xyz,dc=xyz,dc=xyz
olcSubordinate: TRUE
olcAccess: to dn.subtree="ou=xyz,dc=xyz,dc=xyz" by * read
olcAddContentAcl: FALSE
olcLastMod: FALSE
olcMaxDerefDepth: 15
olcReadOnly: FALSE
olcSyncUseSubentry: FALSE
olcMonitoring: FALSE
olcDbURI: "ldap://xx.xx.xx.xx"
olcDbStartTLS: none starttls=no
olcDbACLBind: bindmethod=simple timeout=0 network-timeout=0 binddn="cn=xyz,ou=xyz,dc=xyz,dc=xyz" credentials="xxxxxxxxxxxxxxxxxxxxxx"
olcDbIDAssertBind: mode=legacy flags=prescriptive,proxy-authz-non-critical bindmethod=simple timeout=0 network-timeout=0 binddn="cn=xyz,ou=xyz,dc=xyz,dc=xyz" credentials="xxxxxxxxxxxxxxxxxxxxxx"
olcDbRebindAsUser: TRUE
olcDbChaseReferrals: TRUE
olcDbNoRefs: FALSE
olcDbNoUndefFilter: FALSE
答案1
不受 SSL/TLS 保护的 LDAP 简单绑定是非常不安全,因为它涉及通过网络以明文形式发送用户名和密码凭据。
LDAP 简单绑定是可以接受的仅有的通过 SSL/TLS/LDAPS。
要在 Active Directory 域控制器上启用 LDAPS,您只需在 AD 域控制器上安装带有私钥的合适证书:
请务必阅读上述文章的要求部分,了解什么是可接受的证书。
一旦您在域控制器上安装了可接受的证书,Active Directory 将自动感知其存在并通过端口 636 启用 LDAPS。
您可以从任何证书颁发机构获取证书,只要它受到参与通信的所有各方的信任即可。它可以是现有的 AD 集成 PKI,也可以是公司网络上的非 Microsoft CA,甚至可以是公共的、全球信任的 CA,如 Godaddy、Symantec 等,只要它能够生成满足要求的证书:
- LDAPS 证书位于本地计算机的个人证书存储中(在编程中称为计算机的 MY 证书存储)。
- 与证书匹配的私钥存在于本地计算机的存储中,并且与证书正确关联。私钥一定没有启用强私钥保护。
- 增强密钥使用扩展包括服务器身份验证 (1.3.6.1.5.5.7.3.1) 对象标识符(也称为 OID)。
- 域控制器的 Active Directory 完全限定域名 (例如,DC01.DOMAIN.COM) 必须出现在下列位置之一:
- 主题字段中的通用名称 (CN)。
- 主题备用名称扩展中的 DNS 条目。
- 该证书由域控制器和 LDAPS 客户端信任的 CA 颁发。通过将客户端和服务器配置为信任颁发 CA 所链接的根 CA,可以建立信任。
- 您必须使用 Schannel 加密服务提供商 (CSP) 来生成密钥。
(从技术上讲,它甚至可能是一个自签名证书,尽管这不是一个安全的解决方案。)
一旦您安装此证书,域控制器将自动在端口 636 上启用 LDAPS 服务。(以及 3269 上的全局目录服务。)
到目前为止,我只描述了 LDAPS,而没有具体描述 StartTLS。
如果您愿意,可以针对 Microsoft LDAP 服务器使用 startTLS:
https://msdn.microsoft.com/en-us/library/aa366997(v=vs.85).aspx
它不需要在服务器上进行任何额外的配置。它只需要客户端向服务器发送正确的 LDAP 控件(命令)。(startTLS 的控件 OID 为“1.3.6.1.4.1.1466.20037”。)
答案2
您必须保护两个网段:
- 从客户端到 OpenLDAP;
- 从 OpenLDAP 到 AD。
它们都必须是安全的。
第一部分已经完成StartTLS
。
您只需要在第二个网络跳跃上设置安全性。我认为修改以下内容就足够了:
olcDbURI: "ldap://xx.xx.xx.xx"
olcDbStartTLS: none starttls=no
到:
olcDbURI: "ldaps://xx.xx.xx.xx"
olcDbStartTLS: false
(因为当然不可能同时拥有StartTLS
和LDAPS
)