我正在尝试设置使用 STARTTLS 进行 LDAP 身份验证(我读到 TLS/ldaps 已被弃用)。顺便说一句,未加密的 LDAP 身份验证可以工作,但这不是我想要的。
我设法使用以下方式设置了 LDAP 目录服务器本教程从全新安装的 Ubuntu Server 16.10 开始(2 台 VirtualBox 机器,一台用于服务器,一台用于客户端),并遵循每个步骤,包括可选的最后一步,仅允许 TLS 连接。
现在我可以在服务器和客户端上运行带参数的命令ldapwhoami
。因此,通过 STARTTLS 建立到服务器的 LDAP 连接似乎有效。当我尝试不使用 STARTTLS 连接时,我收到以下(预期的)错误:ldapsearch
-Z
-Z
Confidentiality required (13)
Additional information: TLS confidentiality required
现在我想使用服务器对客户端上的 LDAP 用户进行身份验证。为此,我运行了以下命令在客户端上:
sudo apt-get install ldap-auth-client
# LDAP Server: ldap://ldap.example.com
# Base DN: dc=example,dc=com
# Bind DN: cn=admin,dc=example,dc=com
sudo auth-client-config -t nss -p lac_ldap
sudo vi /usr/share/pam-configs/mkhomedir
# changed "Default: no" to "Default: yes"
# changed "optional" to "required"
sudo pam-auth-update
# enabled "Create home directory on login"
现在,当我想在客户端上更改用户时,客户端上su - otheruser
会附加以下错误消息:/var/log/auth.log
nss_ldap: failed to bind to LDAP server ldap://ldap.example.com: Confidentiality required
这与我尝试运行不带 STARTTLS 的 LDAP 命令时出现的错误消息相同(参见上文),因此问题似乎在于nss_ldap
未正确配置使用 STARTTLS。
我尝试(但没有成功)将条目添加到/etc/ldap/ldap.conf
。现在它看起来像这样:
BASE dc=example,dc=com
URI ldap://ldap.example.com
TLS_CACERT /etc/ldap/ca_certs.pem
LDAP_VERSION 3
SSL start_tls
TLS_REQCERT allow
答案1
在查看客户端配置时,我意外地打开了/etc/ldap.conf
它们/etc/ldap/ldap.conf
,惊讶地发现它们都存在!
该文件/etc/ldap.conf
由 debconf 生成,即在调用sudo apt-get install ldap-auth-client
或时sudo dpkg-reconfigure ldap-auth-config
,似乎是 nss_ldap 使用的文件。它包含许多注释选项。
由于 debconf 向导似乎不支持 STARTTLS,因此我进行了以下更改/etc/ldap.conf
:
- 删除了第一行
###DEBCONF###
- 取消注释该行
ssl start_tls
现在客户端上的身份验证终于可以正常工作了。