Centos
LDAPS 握手失敗 errno 21 是目錄 - 遇到文件結尾
我已經設置了一個CentOS 7 openLDAP passthrough 身份驗證伺服器。
它將通過 LDAP 在 Microsoft Active Directory 上託管的數據庫上對使用者進行身份驗證。
如果我使用 LDAP://,我可以獲得成功的查詢響應
但是,LDAPS:// 會給出證書握手錯誤。
我正在使用從 GoDaddy 購買的 PFX 格式的證書。
我找到了一些可能的解決方案,但到目前為止沒有任何效果。
我試過了:
- 禁用 SELinux 進行測試
- 將 PFX 證書轉換為 PEM 和 DER
- 使用此處解釋的 certutil 來製作 MozNSS DB: http ://www.openldap.org/faq/data/cache/1514.html
pk12util -d /path/to/certdb -i /path/to/file.p12
我找到了這個頁面https://stackoverflow.com/questions/13732826/convert-pem-to-crt-and-key 但我不知道使用什麼命令來獲取 openLDAP 的正確格式證書。
我試過這些:
openssl x509 -outform der -in certificate.pem -out certificate.der openssl x509 -outform der -in certificate.pem -out certificate.crt
當我執行 ldapsearch 時:
ldapsearch -H ldaps://192.168.1.69 -b "OU=Administration,DC=domain,DC=com" -v -LLL -D "CN=ServiceLDAP,OU=Administration,DC=domain,DC=com" "(samaccountname=someuser)" -w secretpass -d1
這些是我得到的錯誤:
ldap_url_parse_ext(ldaps://192.168.1.32) ldap_initialize( ldaps://192.168.1.32:636/??base ) ldap_create ldap_url_parse_ext(ldaps://192.168.1.32:636/??base) ldap_sasl_bind ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP 192.168.1.32:636 ldap_new_socket: 4 ldap_prepare_socket: 4 ldap_connect_to_host: Trying 192.168.1.32:636 ldap_pvt_connect: fd: 4 tm: -1 async: 0 attempting to connect: connect success TLS: certdb config: configDir='/etc/openldap/certs' tokenDescription='ldap(0)' certPrefix='' keyPrefix='' flags=readOnly TLS: using moznss security dir /etc/openldap/certs prefix . TLS: error: tlsm_PR_Recv returned 0 - error 21:Is a directory TLS: error: connect - force handshake failure: errno 21 - moznss error -5938 TLS: can't connect: TLS error -5938:Encountered end of file. ldap_err2string ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
我能夠解決這個問題。
證書和密鑰的正確格式:
openssl pkcs12 -in ./ACertFromGoDaddy.pfx -nocerts -out privatekey.pem -nodes openssl pkcs12 -in ./ACertFromGoDaddy.pfx -nokeys -out publiccert.pem -nodes
我將這些證書放在 ./openldap/certs 中,我可以通過製作一個 ldif 文件並使用 slapadd 載入它來配置 slapd 以從那裡讀取它們:
slapadd -n0 -F /etc/openldap/slapd.d/ -l ./mod_ssl.ldif
我的 mod_ssl.ldif 文件的內容是:
dn: cn=config changetype: modify add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/openldap/certs/publiccert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/openldap/certs/publiccert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/openldap/certs/privatekey.pem
然後我能夠在本地和遠端執行 ldap 搜尋:
ldapsearch -H ldaps://192.168.1.69 -b "OU=Administration,DC=domain,DC=com" -v -LLL -D "CN=ServiceLDAP,OU=Administration,DC=domain,DC=com" "(samaccountname=someuser)" -w secretpass -d1