pam_ldap 和 ldaps 無法聯繫 ldap 伺服器
我正在嘗試在 CentOS 主機系統上允許通過 LDAP 進行身份驗證。但我總是從 pam_ldap收到無法聯繫 LDAP 伺服器錯誤。
LDAP 伺服器是可 ping 的,並且身份驗證與 ldap:// 完美配合,但不能與 ldaps:// 配合使用。它也可以在 debian OS 上與 ldaps:// 完美配合,但在 CentOS 上則不行。
我也遇到了**$ ldapsearch的*無法聯繫錯誤……但我修復了它,在 /etc/openldap/ldap.conf 中設置了 TLS_REQCERT 允許。*但是為 /etc/pam_ldap.conf 設置這個並沒有幫助。
我做的步驟:
- $ yum install pam_ldap nss-pam-ldapd openldap-clients
- $ 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-Server 的 CA-Cert。
- iptables 被禁用
同樣令人困惑的是/var/log/secure中的 IP 。那裡顯示Failed password for testuser from 10.1.1.1,但為 LDAP 伺服器配置的 IP 是 10.1.1.42,主機 IP 是 10.1.1.27。無論如何,如果我使用 uri ldap://10.1.1.42 並評論認證行ssl就像一個魅力。
有任何想法嗎?
.
嘗試通過 pam、/var/log/secure進行身份驗證
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
Migtor 把我推向了正確的方向。謝謝!
當我刪除TLS_REQCERT並檢查ldapsearch錯誤時,我也得到了
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_ldap後,MozNSS 數據庫位於 /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 不再可用。
.
資料來源:
線索在
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/
as URI 而不是ldaps://10.1.1.42/
. 如果您的 DNS 無法解析該名稱,只需將其放入您的/etc/hosts
文件中(只是為了測試,您應該更新您的 DNS 記錄)。