我尝试在 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 不再可用。
。
资料来源: