我正在尝试在 Server 2008 R2 上使用带 SSL 的 ldap。已全部设置完毕,能够使用 ldp.exe 连接到domain.example.org
端口 636(带 SSL 复选框)。这是在本地服务器上。
但是 - 我无法使用 ldapsearch 通过 ssl 和端口 636 进行连接。使用 ldapsearch 时,没有 ssl 和端口 389 可以正常工作。
有什么想法吗?我的客户端是否需要安装证书之类的东西?我主要只是想加密 ldap 连接。感谢您的帮助!
* 编辑 *
有效的命令:
ldapsearch -x -b "dc=XX,dc=example,dc=org" -D "[email protected]" -H ldap://XX.example.org -W '(&(proxyAddresses=smtp*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
不起作用的命令:
ldapsearch -x -b "dc=XX,dc=example,dc=org" -D "[email protected]" -H ldaps://XX.example.org:636 -W '(&(proxyAddresses=smtp*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
我尝试了 -h 的变体并使用 -p 来指定端口。
我该如何将证书从服务器 2008 安装到客户端?
答案1
您的客户端不需要自己的证书。他们只需要信任签署 LDAP 服务器证书的证书颁发机构证书(或证书链)。您无需在本地主机上担心这个问题,因为 CA 证书已默认受信任。
从您的问题中无法确定 LDAP 服务器是否也是证书颁发机构,以及它是否也将 CA 证书用作 LDAP 证书。通常,这是两个不同的证书,并且证书颁发机构位于不同的机器上。
一些快速的谷歌搜索表明您可以在 ldap.conf 中设置一个名为 TLS_CACERT 的选项,或者一个名为 LDAPTLS_CACERT 的等效环境变量,您可以将其指向包含环境中任何/所有 CA 证书(base64 编码)的文件。
如果您的环境中只有一个 CA,那么您应该能够下载其公共证书的 base64 编码版本。如果您只能找到 DER 编码版本,则可以使用 openssl 将其转换为 base64。
openssl x509 -inform der -in cacert.crt -out cacert.pem
答案2
遗憾的是,这是预期的行为。LDAP 在这方面很奇怪,至少对于 Windows AD 来说是这样。没有这样的事情ldaps
,但是如果你指定端口号,加密就会发生。试试这个命令:
ldapsearch -x -b "dc=XX,dc=XXX,dc=org" -D "[email protected]" -H ldap://XX.XXX.org:636 -W '(&(proxyAddresses=smtp*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
对于除 LDAP 之外的大多数情况,您似乎要求在服务的默认 SSL 端口上进行纯文本通信。LDAP 将在此处进行加密通信。
我也不喜欢它,因为它让核实加密正在进行。如果端口发生变化,可能只是通过加密端口发送纯文本,但使用显式架构/协议,您可以知道它至少在尝试。显式协议模式还使在需要时在非标准端口上运行程序变得更容易。但不管喜欢与否,这就是现状。