Centos

pam_ldap 和 ldaps 無法聯繫 ldap 伺服器

  • September 18, 2014

我正在嘗試在 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 記錄)。

引用自:https://serverfault.com/questions/628512