我已经建立了一个CentOS 7 openLDAP 直通身份验证服务器。
它将通过 Microsoft 活动目录上托管的数据库上的 LDAP 对用户进行身份验证。
如果我使用 LDAP://,我可以得到成功的查询响应
但是,LDAPS:// 会出现证书握手错误。
我正在使用从 GoDaddy 购买的 PFX 格式的证书。
我找到了一些可能的解决方案,但目前都没有任何效果。
我努力了:
- 禁用 SELinux 进行测试
- 将 PFX 证书转换为 PEM 和 DER
按照此处的说明使用 certutil 创建 MozNSS DB: http://www.openldap.org/faq/data/cache/1514.html
pk12util -d /路径/到/certdb -i /路径/到/文件.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)
答案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