G'day,我configuration了在端口636上运行的openldap-server机器。我也可以从另一个openldap-client机器telnet到这个端口。 为了保证连接的安全,我在服务器上使用此链接input链接描述在此处创build了自签名证书,然后将证书文件复制到客户端。
我已经确定SELinux在这两台机器上都是可用的,并且客户端/etc/openldap/ldap.conf文件也有TLS_REQCERT选项
客户机的详细configuration是:
# cat ldap.conf URI ldap://ad.dfsi.dev:636 BASE dc=dfsi,dc=dev TLS_CACERTDIR /etc/openldap/cacerts TLS_REQCERT allow
和nslcd文件:
# cat /etc/nslcd.conf tls_reqcert allow ssl start_tls tls_cacertdir /etc/openldap/cacerts tls_reqcert allow
如果我不使用SSL,则ldap客户端可以访问所有ldap用户。 但是,当我通过authconfig-tui更改configuration以使用TLS时,ldaps://ad.xx.dev:636,则失败。
日志说,客户端成功连接到服务器,但然后服务器删除连接,如下所示:
ldapsearch -x -d 1 ldap_create ldap_sasl_bind ldap_send_initial_request ldap_new_connection 1 1 0 ldap_int_open_connection ldap_connect_to_host: TCP ad.dfsi.dev:636 ldap_new_socket: 3 ldap_prepare_socket: 3 ldap_connect_to_host: Trying xx.xx.xx.xx:636 ldap_pvt_connect: fd: 3 tm: -1 async: 0 attempting to connect: connect success ldap_open_defconn: successful ldap_send_server_request ber_scanf fmt ({it) ber: ber_scanf fmt ({i) ber: ber_flush2: 14 bytes to sd 3 ldap_result ld 0x7f8f75e1d150 msgid 1 wait4msg ld 0x7f8f75e1d150 msgid 1 (infinite timeout) wait4msg continue ld 0x7f8f75e1d150 msgid 1 all 1 ** ld 0x7f8f75e1d150 Connections: * host: ad.dfsi.dev port: 636 (default) refcnt: 2 status: Connected last used: Tue Nov 29 15:01:28 2016 ** ld 0x7f8f75e1d150 Outstanding Requests: * msgid 1, origid 1, status InProgress outstanding referrals 0, parent count 0 ld 0x7f8f75e1d150 request count 1 (abandoned 0) ** ld 0x7f8f75e1d150 Response Queue: Empty ld 0x7f8f75e1d150 response count 0 ldap_chkResponseList ld 0x7f8f75e1d150 msgid 1 all 1 ldap_chkResponseList returns ld 0x7f8f75e1d150 NULL ldap_int_select read1msg: ld 0x7f8f75e1d150 msgid 1 all 1 ber_get_next ldap_err2string ldap_result: Can't contact LDAP server (-1) ldap_free_request (origid 1, msgid 1) ldap_free_connection 1 1 ldap_free_connection: actually freed
运行openssl显示客户端在服务器上找不到任何证书,这是不合理的,因为我已经修复了所有的问题:
# openssl s_client -showcerts -connect ad.dfsi.dev:636 CONNECTED(00000003) 140330386184096:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:184: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 247 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE ---
nss-pam authconfg-tui每次生成新的CACERTDIR,覆盖以前的configuration。 因此,我也将证书文件放在/ etc / openldap / cacerts文件夹中。
我的客户机是CentOS7,服务器是Redhat ec2实例。
任何人都可以给我一些提示来解决这个问题吗?
STARTTLS表示在普通端口上build立连接的“显式TLS”,然后发送STARTTLS命令来启动SSL握手并切换到保护模式。
要连接尝试添加-Z或-ZZ切换到ldapsearch :
ldapsearch -x -d 1 -ZZ
是让客户端使用starttls
恐怕OpenSSL现在不支持用于LDAP协议的starttls(请参阅man page man s_client about -starttls参数)
只需要清楚一点:您是否在OpenLDAP服务器中configuration了TLS用法?
你仍然需要设置一些参数。 作为参考,请查看http://www.openldap.org/doc/admin24/tls.html#Server%20Configuration
从我的理解你的客户端连接到LDAP机器,但LDAP机器不知道要传递给客户端的证书。
你能否证实或伪造我的猜测?