16.04:如何使用 ldapsearch 指定证书颁发机构

16.04:如何使用 ldapsearch 指定证书颁发机构

我一直在尝试调试 LDAP 连接,因此我ldapsearch通过进行安装sudo apt install ldap-utils。以下是该命令的输出:

# ldapsearch -x -LLL -H ldaps://myip -d1 -ZZ
ldap_url_parse_ext(ldaps://myip)
ldap_create
ldap_url_parse_ext(ldaps://myip/??base)
ldap_extended_operation_s
ldap_extended_operation
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP myip:636
ldap_new_socket: 4
ldap_prepare_socket: 4
ldap_connect_to_host: Trying myip:636
ldap_pvt_connect: fd: 4 tm: -1 async: 0
attempting to connect: 
connect success
TLS: peer cert untrusted or revoked (0x42)
TLS: can't connect: (unknown error code).
ldap_err2string
ldap_start_tls: Can't contact LDAP server (-1)
    additional info: (unknown error code)

具体来说,我关注的是这一行: TLS: peer cert untrusted or revoked (0x42)

我进行了一些谷歌搜索,发现有人解释如何在名为 的目录中的文件中设置此设置/etc/openldap。但是,此目录在机器上不存在 - 它似乎不是在安装 期间创建的ldap-utils

我不知道是否有办法ldapsearch忽略服务器证书的信任级别,或者传递某种 CA。这里继续进行连接测试的合适解决方案是什么?

答案1

将以下行添加到 /etc/ldap/ldap.conf:
TLS_REQCERT never

它将阻止 ldapsearch 验证证书。因此不是最安全的选项。您可以使用以下命令指定 CA 证书TLS_CACERT /path/to/trusted/ca

答案2

这是一个老问题,但我刚好找到了一个正确的答案:如何安装命令行证书

短篇故事:

openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt | openssl pkcs7 -print_certs -noout | grep "your CA"
  • 重复 ldapsearch,现在应该会成功。

很长的故事:

在 Debian/Ubuntu 上,LDAP 工具使用 GnuTLS 构建。GnuTLS 不适用于/etc/ssl/certs哈希缓存。(请参阅TLS_CACERTDIR中的注释man ldap.conf。)

c_rehash实用程序仅更新哈希缓存,但不更新/etc/ssl/certs/ca-certificates.crt

为了正确更新哈希缓存和 CA 捆绑包,不要将您的 CA 证书链接到/etc/ssl/certs,而是将链接放入/usr/local/share/ca-certificates/并运行update-ca-certificates

相关内容