Ssl

SSL 的 OpenLDAP“連接失去”錯誤

  • July 17, 2020

我在 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 已經有了這個文件,這就是它工作的原因。

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