解决方案

解决方案

我尝试在 CentOS 主机系统上允许通过 LDAP 进行身份验证。但我总是得到一个无法联系 LDAP 服务器来自 pam_ldap 的错误。

LDAP 服务器可以 ping 通,身份验证可以完美地与 ldap:// 配合使用,但不能与 ldaps:// 配合使用。在 Debian OS 上,它也可以完美地与 ldaps:// 配合使用,但在 CentOS 上则不行。

我拿到无法联系错误也$ ldapsearch ...但我修复了它的设置TLS_REQCERT 允许在 /etc/openldap/ldap.conf 中。但是对 /etc/pam_ldap.conf 进行此项设置没有帮助。

我执行的步骤:

  • $ yum 安装 pam_ldap nss-pam-ldapd openldap-客户端
  • $ authconfig-tui并激活 LDAP 进行身份验证
  • 调整/etc/pam_ldap
  • 调整/etc/nslcd.conf
  • 调整/etc/openldap/ldap.conf
  • 创造/etc/ldap/ldap.conf(在某处读到它是一个后备配置文件路径)
  • 创造/etc/ldap.conf(与 /etc/ldap/ldap.conf 内容相同)
  • 重新启动服务 nscd 和 nslcd

更多信息:

  • LDAP 服务器的 CA-Cert 对所有人而言都是可读的。
  • iptables 已禁用

同样令人困惑的是/var/log/安全那里写着10.1.1.1 的 testuser 密码失败,但 LDAP 服务器的配置 IP 是 10.1.1.42,主机 IP 是 10.1.1.27。无论如何,如果我使用 uri ldap://10.1.1.42 并注释掉该行SSL 开启身份验证非常有效。

有任何想法吗?

尝试通过 pam 进行身份验证,/var/log/安全

Sep 15 09:50:37 client-server unix_chkpwd[16146]: password check failed for user (testuser)
Sep 15 09:50:37 client-server sshd[16144]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.1.1.1  user=testuser
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: reconnecting to LDAP server...
Sep 15 09:50:37 client-server sshd[16144]: pam_ldap: ldap_simple_bind Can't contact LDAP server
Sep 15 09:50:40 client-server sshd[16144]: Failed password for testuser from 10.1.1.1 port 11339 ssh2
Sep 15 09:50:40 client-server sshd[16145]: Received disconnect from 10.1.1.1: 13: Unable to authenticate

跑步$ ldapsearch -v -H ldaps://10.1.1.42/ -D cn=admin,dc=sub,dc=example,dc=org -W -x -b dc=sub,dc=example,dc=org -d1检查 ldaps// 是否正常工作。(是的,它正常工作)

ldap_url_parse_ext(ldaps://10.1.1.42/)
ldap_initialize( ldaps://10.1.1.42:636/??base )
ldap_create
ldap_url_parse_ext(ldaps://10.1.1.42:636/??base)
Enter LDAP Password:
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP 10.1.1.42:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying 10.1.1.42:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
TLS: certificate [CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS certificate verification: subject: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, issuer: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, cipher: AES-128, security level: high, secret key bits: 128, total key bits: 128, cache hits: 0, cache misses: 0, cache not reusable: 0
ldap_open_defconn: successful
ldap_send_server_request
...

内容/etc/pam_ldap.conf

ldap_version 3
pam_password crypt
uri ldaps://10.1.1.42:636
base dc=sub,dc=example,dc=org
ssl on
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
tls_checkpeer no

内容/etc/openldap/ldap.conf

TLS_REQCERT allow
TLS_CACERTFILE /srv/ldap-cacert.pem
URI ldaps://10.1.1.42:636/
BASE dc=sub,dc=example,dc=org

内容/etc/nslcd.conf

uid nslcd
gid ldap
ssl on
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
uri ldaps://10.1.1.42:636/
base dc=sub,dc=example,dc=org

内容/etc/ldap.conf/etc/ldap/ldap.conf

tls_checkpeer no
tls_reqcert allow
tls_cacertfile /srv/ldap-cacert.pem
uri ldaps://10.1.1.42:636/
base dc=sub,dc=example,dc=org

答案1

线索就在ldapsearch命令输出中:

TLS: certificate [CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE] is not valid - error -8172:Peer's certificate issuer has been marked as not trusted by the user..
TLS certificate verification: subject: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, issuer: CN=sub.example.org,OU=test-ou,O=test-o,ST=test-st,C=DE, cipher: AES-128, security level: high, secret key bits: 128, total key bits: 128, cache hits: 0, cache misses: 0, cache not reusable: 0

它显示:certificate ... is not valid... Peer's certificate issuer has been marked as not trusted by the user。这意味着用于颁发服务器证书的 CA 不受信任。在我看来,CACERTFILETLS_CACERTFILE /srv/ldap-cacert.pem不包含正确的 CA 证书。除非您收到错误清除ldapsearch输出,否则它不会起作用。

解决该问题后,您可能会因证书的 CN 而收到错误。如果出现这种情况,请尝试使用ldaps://sub.example.org/URI 而不是ldaps://10.1.1.42/。如果您的 DNS 无法解析该名称,只需将其放入您的/etc/hosts文件中(仅用于测试,您应该更新您的 DNS 记录)。

答案2

Migtor 为我指明了正确的方向。谢谢!

当我删除TLS_REQCERT并检查了ldap搜索我也遇到了错误TLS: error: connect - force handshake failure: errno 2 - moznss error -8172

我的 CA 证书是正确的,但是 openldap 默认使用 Mozilla 网络安全服务 (MozNSS) 来检查权限。所以我必须将我的自签名 CA 添加到此数据库中。

编辑:正如 Migtor 在下面的评论中指出的那样,这只适用于 CentOS、RHEL 及其衍生产品。

解决方案

首先将你的CA证书复制到客户端(我的路径:/etc/openldap/cacerts/ldap-cacert.pem)

安装后pam_ldapMozNSS 数据库位于 /etc/openldap/certs :

  • 跑步# certutil -d /etc/openldap/certs -A -n "ldap CA" -t TCu,Cu,Tuw -a -i /etc/openldap/cacerts/ldap-cacert.pem
    • -n“ldap CA”只是在 MozNSS 数据库中标识您的证书的名称
  • 核实:# certutil -L -d /etc/openldap/certs

我的新内容/etc/pam_ldap.conf

ldap_version 3
pam_password crypt
uri ldaps://[FQDN-of-my-ldap-server]:636
base dc=sub,dc=example,dc=org
ssl on
tls_cacertdir /etc/openldap/certs

nss-pam-ldapd 怎么样?

这不再是必需的。我已将其清除,/etc/nslcd.conf 不再可用。

资料来源:

相关内容