我一直在尝试调试 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
这是一个老问题,但我刚好找到了一个正确的答案:如何安装命令行证书。
短篇故事:
- 将您的私人 CA 证书复制(链接)到
/usr/local/share/ca-certificates/
; - 跑步
update-ca-certificates
; - 验证是否
/etc/ssl/certs/ca-certificates.crt
包含您的证书(请参阅https://serverfault.com/questions/590870/how-to-view-all-ssl-certificates-in-a-bundle(英文):
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
。