使 nss_ldap 使用 STARTTLS

使 nss_ldap 使用 STARTTLS

我正在尝试设置使用 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

现在客户端上的身份验证终于可以正常工作了。

相关内容