Ssl
SSL 的 OpenLDAP“連接失去”錯誤
我在 Alpine 3.8 系統上安裝了 OpenLDAP 2.4.50,還有兩個 Debian 10 客戶端——我們稱它們為 A 和 B——試圖連接 ldap 伺服器。我的問題是第一個可以,第二個不能。
A 和 B 是相同的機器,都安裝了最新的 Debian 10。客戶端 A 可以連接 ldap 伺服器
ldapsearch -x -b "dc=mydomain,dc=tld" -H ldaps://ldap.mydomain.tld/
,但客戶端 B 失敗。以下是客戶端 B 嘗試連接時伺服器顯示的內容:Jul 16 12:46:39 reglisse local4.debug slapd[17451]: conn=1132 fd=22 ACCEPT from IP=xxx.xxx.xxx.xxx:45444 (IP=0.0.0.0:636) Jul 16 12:46:39 reglisse local4.debug slapd[17451]: conn=1132 fd=22 TLS established tls_ssf=256 ssf=256 Jul 16 12:46:39 reglisse local4.debug slapd[17451]: conn=1132 fd=22 closed (connection lost)
- 伺服器證書已使用
certbot
.- 客戶端 A 和客戶端 B 都可以使用
ldapsearch -x -b "dc=mydomain,dc=tld" -H ldap://ldap.mydomain.tld/ -v
. 這應該證明沒有網路問題,並且伺服器正確監聽了389埠。- 客戶端 A 和客戶端 B 都可以成功連接到 ldaps 埠
openssl s_client -connect ldap.mydomain.tld:636 -showcerts
。這應該證明伺服器正確地監聽了 636 埠。- 客戶端 A 和客戶端 B 都
ldap-utils
安裝了相同的包版本,並ldd /usr/bin/ldapsearch
表明兩個二進製文件都是針對相同的庫建構的。這應該證明兩個客戶端是相同的。- 伺服器
slapd.conf
絕對沒有什麼花哨的:
suffix dc=mydomain,dc=tld rootdn cn=admin,dc=mydomain,dc=tld rootpw "xxxxxxxxxxx" TLSCertificateKeyFile /etc/openldap/certs/privkey.pem TLSCACertificateFile /etc/openldap/certs/fullchain.pem TLSCertificateFile /etc/openldap/certs/cert.pem include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/inetorgperson.schema
那麼,我在這裡做錯了什麼?
我發現
ldapsearch
有一個-d
顯示有趣事物的選項:$ ldapsearch -x -b "dc=mydomain,dc=tld" -H ldaps://ldap.mydomain.tld/ -v -d1 ldap_url_parse_ext(ldaps://ldap.mydomain.tld/) ldap_initialize( ldaps://ldap.mydomain.tld:636/??base ) ldap_create ldap_url_parse_ext(ldaps://ldap.mydomain.tld:636/??base) ldap_sasl_bind ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP ldap.mydomain.tld:636 ldap_new_socket: 3 ldap_prepare_socket: 3 ldap_connect_to_host: Trying 45.67.80.98:636 ldap_pvt_connect: fd: 3 tm: -1 async: 0 attempting to connect: connect success TLS: peer cert untrusted or revoked (0x42) TLS: can't connect: (unknown error code). ldap_err2string ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
因此,客戶端 B 似乎不信任伺服器 ldap 證書。要解決此問題,我必須在
/etc/ldap/ldap.conf
.TLS_CACERT /etc/ssl/certs/ca-certificates.crt
有些人可以通過以下方式解決類似問題:
TLS_REQCERT allow
/etc/ldap/ldap.conf
似乎是大多數 ldap 客戶端使用的配置文件。客戶 A 已經有了這個文件,這就是它工作的原因。