LDAP在Linux命令行中根据证书搜索用户

LDAP search user based on certificate in Linux command line

我想使用 ldapsearch 搜索用户,但托管服务提供商给了我 CA 的证书。我在我的 ldapconf 中添加了该证书。

在执行 ldapsearch 命令之前,我正在运行 openssl 如下

openssl s_client -connect hostname -CAfile /certificate.pem

通过openssl连接后,我在另一个终端执行以下命令

ldapsearch -h hostname -p portno -D uid=mailid@domain.con, dc=global,dc=example,dc=net 

现在我想知道,有没有办法在执行ldapsearch命令的同时使用证书?

这应该可以通过执行以下操作来实现:

env LDAPTLS_CACERT=/certificate.pem ldapsearch -h hostname -p portno -D uid=mailid@domain.con, dc=global,dc=example,dc=net

不过,我会使用:

env LDAPTLS_CACERT=/certificate.pem ldapsearch -H ldaps://hostname:portno/ -D uid=mailid@domain.con, dc=global,dc=example,dc=net

确保它尝试使用 ldap,而不是启发式方法。

如果您仍然遇到错误,您可以添加 -ZZ,这将提供更好的错误消息。

一个明显的陷阱是使用过期的证书,第二个最明显的陷阱是在请求中使用的名称与您在证书中使用的名称不同。您可以使用 openssl s_client -connect hostname:portno 读取服务器证书 - 会有一行内容如下:

subject=/C=IE/CN=hostname.domain.local

您必须确保 ldapsearch 请求的主机名与 CN=... 项中列出的主机名匹配。如果它不匹配那么你将无法连接(这是简单的证书验证,如果有替代名称那么你可以尝试:openssl x509 -text -noout -in /certificate.pem | grep DNS

最后一个警告是 Mac OSX 不遵守 LDAPTLS_CACERT 环境变量。您必须将证书导入钥匙串(在这种情况下,我不知道 OSX 的解决方法)。