- Вопрос или проблема
- Ответ или решение
- Шаг 1: Убедитесь, что LDAP-сервер работает
- Шаг 2: Настройка служб SLAPD
- Шаг 3: Генерация SSL-сертификатов
- Шаг 4: Добавление сертификатов в доверенные
- Шаг 5: Настройка TLS в конфигурации LDAP
- Шаг 6: Применение изменений
- Шаг 7: Настройка клиента для использования LDAPS
- Шаг 8: Тестирование подключения
- Заключение
Вопрос или проблема
У меня есть следующая проблема, и я уже несколько недель гуглю по этому поводу. Поскольку я действительно не знаю, в чем проблема, я задаю свой вопрос здесь в надежде найти какого-нибудь гения в LDAP или SSL 🙂
У меня есть рабочий сервер openLDAP с отдельной клиентской машиной (обе работают на Linux Ubuntu 16.04.5). Соединение работает хорошо. Теперь я хотел бы обеспечить безопасность соединения с помощью LDAPS.
Сначала я изменил SLAPD_SERVICES в
/etc/default/slapd
с ldap:/// ldapi:///
на ldap:/// ldaps:/// ldapi:///
Затем я создал собственный CA с самоподписанным сертификатом и ключом ldap-сервера, csr и crt (подписанными CA, который я создал).
Я добавил свой собственный ca.crt в доверенные сертификаты, скопировав его в
/usr/local/share/ca-certificates/
и выполнив эту команду:
sudo update-ca-certificates
Я скопировал ca.crt, ldap.key и ldap.crt в /etc/ldap/ssl/files
и сделал их владельцем openldap (chown & chgrp)
После того, как я это сделал, я следовал учебнику (https://www.server-world.info/en/note?os=Debian_9&p=openldap&f=4) для создания mod_ssl.ldif
#
mod_ssl.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/files/ca.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/files/ldap.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/files/ldap.key
#
После создания ldif я хотел добавить его в свою конфигурацию, используя эту команду
ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
Вывод этой команды:
root@ldap-server:/etc/ldap/schema# ldapmodify -Y EXTERNAL -H ldapi:///
-f mod_ssl.ldif SASL/EXTERNAL аутентификация начата SASL имя пользователя: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0
изменение записи “cn=config” ldap_result: Не удается установить связь с LDAP-сервером
(-1)
#
После этой команды мой slapd был мертв.
(–> Проверил открытые порты перед выполнением этой команды с помощью netstat -tulpan
и после выполнения.)
Перезапустил slapd с помощью /etc/init.d/slapd restart
Я включил запись slapd с loglevel -1
На мой взгляд, логи совершенно чистые и не показывают никаких проблем.
tail -f /var/log/syslog
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on 1 descriptor
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on:
19 окт 08:59:17 ldap-server slapd[1464]:
19 окт 08:59:17 ldap-server slapd[1464]: slap_listener_activate(11):
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=9 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=10 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=11 busy
19 Окт 08:59:17 ldap-server slapd[1464]: >>> slap_listener(ldapi:///)
19 окт 08:59:17 ldap-server slapd[1464]: daemon: listen=11, новое соединение на 16
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on 1 descriptor
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on:
19 окт 08:59:17 ldap-server slapd[1464]:
19 окт 08:59:17 ldap-server slapd[1464]: daemon: добавлено 16r (активно) listener=(nil)
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 fd=16 ACCEPT from PATH=/var/run/slapd/ldapi (PATH=/var/run/slapd/ldapi)
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=9 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=10 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=11 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on 2 descriptors
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on:
19 окт 08:59:17 ldap-server slapd[1464]: 16r
19 окт 08:59:17 ldap-server slapd[1464]:
19 окт 08:59:17 ldap-server slapd[1464]: daemon: read active on 16
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=9 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=10
active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=11 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: connection_get(16)
19 окт 08:59:17 ldap-server slapd[1464]: connection_get(16): got connid=1001
19 окт 08:59:17 ldap-server slapd[1464]: connection_read(16): checking for input on id=1001
19 окт 08:59:17 ldap-server slapd[1464]: op tag 0x60, time 1539932357
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on 1 descriptor
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on:
19 окт 08:59:17 ldap-server slapd[1464]:
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=9 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=10 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=11 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=0 do_bind
19 окт 08:59:17 ldap-server slapd[1464]: >>> dnPrettyNormal: <>
19 окт 08:59:17 ldap-server slapd[1464]: <<< dnPrettyNormal: <>, <>
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=0 BIND dn="" method=163
19 окт 08:59:17 ldap-server slapd[1464]: do_bind: dn () SASL mech EXTERNAL
19 окт 08:59:17 ldap-server slapd[1464]: ==> sasl_bind: dn="" mech=EXTERNAL datalen=0
19 окт 08:59:17 ldap-server slapd[1464]: SASL Canonicalize [conn=1001]: authcid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
19 окт 08:59:17 ldap-server slapd[1464]: slap_sasl_getdn: conn 1001 id=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth [len=55]
19 окт 08:59:17 ldap-server slapd[1464]: ==>slap_sasl2dn: converting SASL name gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth to a DN
19 окт 08:59:17 ldap-server slapd[1464]: <==slap_sasl2dn: Converted SASL name to <nothing>
19 окт 08:59:17 ldap-server slapd[1464]: SASL Canonicalize [conn=1001]: slapAuthcDN="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
19 окт 08:59:17 ldap-server slapd[1464]: SASL proxy authorize [conn=1001]: authcid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" authzid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=0 BIND authcid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" authzid="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
19 окт 08:59:17 ldap-server slapd[1464]: SASL Authorize [conn=1001]: proxy authorization allowed authzDN=""
19 окт 08:59:17 ldap-server slapd[1464]: send_ldap_sasl: err=0 len=-1
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=0 BIND dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" mech=EXTERNAL sasl_ssf=0 ssf=71
19 окт 08:59:17 ldap-server slapd[1464]: do_bind: SASL/EXTERNAL bind: dn="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" sasl_ssf=0
19 окт 08:59:17 ldap-server slapd[1464]: send_ldap_response: msgid=1 tag=97 err=0
19 окт 08:59:17 ldap-server kernel: [ 1801.480222] slapd[1468]: segfault at 35 ip 00007f1093e55360 sp 00007f104bffc268 error 4 in libgmp.so.10.3.0[7f1093e41000+7f000]
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=0 RESULT tag=97 err=0 text=
19 окт 08:59:17 ldap-server slapd[1464]: <== slap_sasl_bind: rc=0
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on 1 descriptor
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on:
19 окт 08:59:17 ldap-server slapd[1464]: 16r
19 окт 08:59:17 ldap-server slapd[1464]:
19 окт 08:59:17 ldap-server slapd[1464]: daemon: read active on 16
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=9 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=10 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=11 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: connection_get(16)
19 окт 08:59:17 ldap-server slapd[1464]: connection_get(16): got connid=1001
19 окт 08:59:17 ldap-server slapd[1464]: connection_read(16): checking for input on id=1001
19 окт 08:59:17 ldap-server slapd[1464]: op tag 0x66, time 1539932357
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=1 do_modify
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=1 do_modify: dn (cn=config)
19 окт 08:59:17 ldap-server slapd[1464]: >>> dnPrettyNormal: <cn=config>
19 окт 08:59:17 ldap-server slapd[1464]: <<< dnPrettyNormal: <cn=config>, <cn=config>
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=1 modifications:
19 окт 08:59:17 ldap-server slapd[1464]: #011add: olcTLSCACertificateFile
19 окт 08:59:17 ldap-server slapd[1464]: #011#011one value, length 33
19 окт 08:59:17 ldap-server slapd[1464]: #011replace: olcTLSCertificateFile
19 окт 08:59:17 ldap-server slapd[1464]: #011#011one value, length 35
19 окт 08:59:17 ldap-server slapd[1464]: #011replace: olcTLSCertificateKeyFile
19 окт 08:59:17 ldap-server slapd[1464]: #011#011one value, length 35
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=1 MOD dn="cn=config"
19 окт 08:59:17 ldap-server slapd[1464]: conn=1001 op=1 MOD attr=olcTLSCACertificateFile olcTLSCertificateFile olcTLSCertificateKeyFile
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: результат не в кешe (olcTLSCACertificateFile)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: добавлен доступ к "cn=config" "olcTLSCACertificateFile" запрошен
19 окт 08:59:17 ldap-server slapd[1464]: => acl_get: [1] attr olcTLSCACertificateFile
19 окт 08:59:17 ldap-server slapd[1464]: => acl_mask: доступ к записи "cn=config", атрибут "olcTLSCACertificateFile" запрошен
19 окт 08:59:17 ldap-server slapd[1464]: => acl_mask: к значению от "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth", (=0)
19 окт 08:59:17 ldap-server slapd[1464]: <= проверка a_dn_pat: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
19 окт 08:59:17 ldap-server slapd[1464]: <= acl_mask: [1] применение manage(=mwrscxd) (остановить)
19 окт 08:59:17 ldap-server slapd[1464]: <= acl_mask: [1] mask: manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => slap_access_allowed: добавление доступа предоставлено manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: добавление доступа предоставлено manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: результат не в
кеше (olcTLSCertificateFile)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: удаление доступа к "cn=config" "olcTLSCertificateFile" запрошено
19 окт 08:59:17 ldap-server slapd[1464]: => acl_get: [1] attr olcTLSCertificateFile
19 окт 08:59:17 ldap-server slapd[1464]: => acl_mask: доступ к записи "cn=config", атрибут "olcTLSCertificateFile" запрошен
19 окт 08:59:17 ldap-server slapd[1464]: => acl_mask: к всем значениям от "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth", (=0)
19 окт 08:59:17 ldap-server slapd[1464]: <= проверка a_dn_pat: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
19 окт 08:59:17 ldap-server slapd[1464]: <= acl_mask: [1] применение manage(=mwrscxd) (остановить)
19 окт 08:59:17 ldap-server slapd[1464]: <= acl_mask: [1] mask: manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => slap_access_allowed: удаление доступа предоставлено manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: удаление доступа предоставлено manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: результат не в кеше (olcTLSCertificateFile)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: добавление доступа к "cn=config" "olcTLSCertificateKeyFile" запрошено
19 окт 08:59:17 ldap-server slapd[1464]: => acl_get: [1] attr olcTLSCertificateKeyFile
19 окт 08:59:17 ldap-server slapd[1464]: => acl_mask: доступ к записи "cn=config", атрибут "olcTLSCertificateKeyFile" запрошен
19 окт 08:59:17 ldap-server slapd[1464]: => acl_mask: к всем значениям от "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth", (=0)
19 окт 08:59:17 ldap-server slapd[1464]: <= проверка a_dn_pat: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
19 окт 08:59:17 ldap-server slapd[1464]: <= acl_mask: [1] применение manage(=mwrscxd) (остановить)
19 окт 08:59:17 ldap-server slapd[1464]: <= acl_mask: [1] mask: manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => slap_access_allowed: добавление доступа предоставлено manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: => access_allowed: добавление доступа предоставлено manage(=mwrscxd)
19 окт 08:59:17 ldap-server slapd[1464]: slap_queue_csn: queueing 0x7f104bffc340 20181019065917.048487Z#000000#000#000000
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_required entry (cn=config), objectClass "olcGlobal"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "objectClass"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "cn"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "olcArgsFile"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "olcLogLevel"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type
"olcPidFile"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "olcToolThreads"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "structuralObjectClass"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "entryUUID"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "creatorsName"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "createTimestamp"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "olcTLSCACertificateFile"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "olcTLSCertificateFile"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "olcTLSCertificateKeyFile"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "entryCSN"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "modifiersName"
19 окт 08:59:17 ldap-server slapd[1464]: oc_check_allowed type "modifyTimestamp"
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on 1 descriptor
19 окт 08:59:17 ldap-server slapd[1464]: daemon: activity on:
19 окт 08:59:17 ldap-server slapd[1464]:
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=9 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=10 active_threads=0 tvp=zero
19 окт 08:59:17 ldap-server slapd[1464]: daemon: epoll: listen=11 active_threads=0 tvp=zero
И последнее, но не менее важное… Вот вывод моего
netstat -tulpan
Протокол Recv-Q Send-Q Локальный адрес Удаленный адрес Состояние PID/Имя программы
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
992/sshd
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 1535/slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1535/slapd
ОБНОВЛЕНИЕ:
Я настроил свою клиентскую машину LDAP на использование LDAPS (до настройки LDAPS все работало хорошо через LDAP :389)
- Добавил CA.crt с сервера LDAP и доверил его, как описано выше
- Изменил
/etc/ldap/ldap.conf
и добавил путь к новому доверенному CA.crt - Изменил
/etc/ldap.conf
, чтобы использовать LDAPS, и раскомментировал строку ssl start_tls - Изменил URI LDAP с помощью команды
sudo dpkg-reconfigure ldap-auth-config
Я перезапустил клиентскую машину и открыл tcpdump на своем сервере LDAP, прослушивая IP-адрес клиента и все соединения для диапазона портов 389-636
10:00:27.149772 IP ldap-client.52803 > ldap-server.ldaps: Flags [S], seq 1684570111, win 29200, options [mss 1460,sackOK,TS val 4294902186 ecr 0,nop,wscale 7], length 0
10:00:27.149813 IP ldap-server.ldaps > ldap-client.52803: Flags [S.], seq 3586026827, ack 1684570112, win 28960, options [mss 1460,sackOK,TS val 1292850 ecr 4294902186,nop,wscale 7], length 0
10:00:27.149924 IP ldap-client.52803 > ldap-server.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294902186 ecr 1292850], length 0
10:00:27.151549 IP ldap-client.52803 > ldap-server.ldaps: Flags [P.], seq 1:118, ack 1, win 229, options [nop,nop,TS val 4294902186 ecr 1292850], length 117
10:00:27.151567 IP ldap-server.ldaps > ldap-client.52803: Flags [.], ack 118, win 227, options [nop,nop,TS val 1292850 ecr 4294902186], length 0
10:00:27.151949 IP ldap-server.ldaps > ldap-client.52803: Flags [F.], seq 1, ack 118, win 227, options [nop,nop,TS val 1292850 ecr 4294902186], length 0
10:00:27.152095 IP ldap-client.52803 > ldap-server.ldaps: Flags [.], ack 2, win 229, options [nop,nop,TS val 4294902187 ecr 1292850], length 0
10:00:27.152157 IP ldap-client.52803 > ldap-server.ldaps: Flags [F.], seq 118, ack 2, win 229, options [nop,nop,TS val 4294902187 ecr 1292850], length 0
10:00:27.152174 IP ldap-server.ldaps > ldap-client.52803: Flags [.], ack 119, win 227, options [nop,nop,TS val 1292850 ecr 4294902187], length 0
10:00:27.152288 IP ldap-client.52804 > ldap-server.ldaps: Flags [S], seq 1697088540, win 29200, options [mss 1460,sackOK,TS val 4294902187 ecr 0,nop,wscale 7], length 0
10:00:27.152305 IP ldap-server.ldaps > ldap-client.52804: Flags [S.], seq 2792459463, ack 1697088541, win 28960, options [mss 1460,sackOK,TS val 1292850 ecr 4294902187,nop,wscale 7], length 0
10:00:27.152360 IP ldap-client.52804 > ldap-server.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294902187 ecr 1292850], length 0
10:00:27.152502 IP ldap-client.52804 > ldap-server.ldaps: Flags [P.], seq 1:118, ack 1, win 229, options [nop,nop,TS val 4294902187 ecr 1292850], length 117
10:00:27.152512 IP ldap-server.ldaps > ldap-client.52804: Flags [.], ack 118, win 227, options [nop,nop,TS val 1292850 ecr 4294902187], length 0
10:00:27.152909 IP ldap-server.ldaps > ldap-client.52804: Flags [F.], seq 1, ack 118, win 227, options [nop,nop,TS val 1292850 ecr 4294902187], length 0
10:00:27.152998 IP ldap-client.52804 > ldap-server.ldaps: Flags [F.], seq 118, ack 2, win 229, options [nop,nop,TS val 4294902187 ecr 1292850], length 0
10:00:27.153010 IP ldap-server.ldaps > ldap-client.52804: Flags [.], ack 119, win 227, options [nop,nop,TS val 1292850 ecr 4294902187], length 0
10:00:28.153396 IP ldap-client.52805 > ldap-server.ldaps: Flags [S], seq 592612370, win 29200, options [mss 1460,sackOK,TS val 4294902437 ecr 0,nop,wscale 7], length 0
10:00:28.153437 IP ldap-server.ldaps > ldap-client.52805: Flags [S.], seq 1983710944, ack 592612371, win 28960, options [mss 1460,sackOK,TS val 1293101 ecr 4294902437,nop,wscale 7], length 0
10:00:28.153580 IP ldap-client.52805 > ldap-server.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294902437 ecr 1293101], length 0
10:00:28.153759 IP ldap-client.52805 > ldap-server.ldaps: Flags [P.], seq 1:118, ack 1, win 229, options [nop,nop,TS val 4294902437 ecr 1293101], length 117
10:00:28.153767 IP ldap-server.ldaps > ldap-client.52805: Flags [.], ack 118, win 227, options [nop,nop,TS val 1293101 ecr 4294902437], length 0
10:00:28.154285 IP ldap-server.ldaps > ldap-client.52805: Flags [F.], seq 1, ack 118, win 227, options [nop,nop,TS val 1293101 ecr 4294902437], length 0
10:00:28.154413 IP ldap-client.52805 > ldap-server.ldaps: Flags [F.], seq 118, ack 2, win 229, options [nop,nop,TS val 4294902437 ecr 1293101], length 0
10:00:28.154423 IP ldap-server.ldaps > ldap-client.52805: Flags [.], ack 119, win 227, options [nop,nop,TS val 1293101 ecr 4294902437], length 0
^C
513 пакетов захвачено
513 пакетов получено по фильтру
0 пакетов сброшено ядром
61 пакет сброшен интерфейсом
Надеюсь, кто-то знает мою проблему и сможет помочь мне 🙂
С наилучшими пожеланиями
Tabby
Это не настоящий ответ, но мне не хватает 50 репутационных пунктов, чтобы добавить комментарий:
Вы можете получить представление об ошибке, если отладите с точки зрения клиента, используя:
ldapsearch -x -LLL -ZZ -d 1
Это может раскрыть информацию о сертификатах, в чем я подозреваю. Кроме того, поскольку вы используете Ubuntu, убедитесь, что AppArmor не блокирует доступ к сертификату, добавив следующее в ваш /etc/ldap/ssl/files
в конце:
/etc/ldap/ssl/files/ r,
/etc/ldap/ssl/files/* r,
Вы можете проверить наличие ошибок AppArmor с помощью journalctl -xaeu apparmor
.
Вы можете проверить, может ли пользователь openldap
действительно читать файлы, необходимые для аутентификации, выполнив:
sudo -u openldap head -1 /etc/ldap/ssl/files/*
Кроме того, вы никогда не должны использовать LDAPS, а использовать LDAP+STARTTLS, как описано в Лучшие практики в безопасности LDAP Эндрю Финдлея.
Пожалуйста, постарайтесь сделать свой пост более читаемым, добавив 4 пробела перед текстом, который предназначен для отображения в моноширинном формате.
Наконец, я заставил это работать. Я нашел ответ в этом блоге https://web.archive.org/web/20150530064010/http://rogermoffatt.com/2011/08/24/ubuntu-openldap-with-ssltls/
После создания этих 2 .pem файлов для ключа и сертификата я следовал блогу, изменил владельца .pem файлов и создал файл ldif.
Дополнительно я добавил сертификат в доверенные сертификаты и добавил путь в /etc/ldap/ldap.conf с новой строкой TLS_REQCERT never.
Сторона клиента я скопировал certificate.pem и преобразовал его в файл .crt. Затем я добавил оба файла в доверенные сертификаты и обновил их.
Я раскомментировал строки
ssl start_tls
ssl on
из /etc/ldap.conf и установил uri с ldap:// на ldaps:// в том же файле.
Для тех, кто использует сценарий ssh для получения ssh-ключей с сервера ldap, необходимо скорректировать uri в сценарии.
Вот и всё!
Ответ или решение
Для активизации SSL/LDAPS в OpenLDAP 2.4 на Ubuntu 16.04.5 LTS и решения ошибки ldap_result: Can't contact LDAP server (-1)
, следуйте подробным инструкциям, которые помогут вам успешно настроить вашу систему. Эта процедура включает в себя несколько ключевых этапов, начиная с установки необходимых сертификатов и заканчивая настройкой конфигураций.
Шаг 1: Убедитесь, что LDAP-сервер работает
Перед началом убедитесь, что ваш LDAP-сервер работает. Используйте команду:
sudo systemctl status slapd
Если сервер не работает, запустите его:
sudo systemctl start slapd
Шаг 2: Настройка служб SLAPD
Измените параметры служб в файле /etc/default/slapd
, как вы уже сделали:
SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"
Шаг 3: Генерация SSL-сертификатов
Создайте собственный Центр сертификации (CA) и сгенерируйте самоподписанный сертификат, а также ключи. Сохраните их в безопасном месте, например, в каталоге /etc/ldap/ssl/files
.
Шаг 4: Добавление сертификатов в доверенные
Переместите ваш CA сертификат в каталог для доверенных сертификатов:
sudo cp /path/to/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Также, убедитесь, что владелец и группа файлов сертификата и ключа – это openldap
:
sudo chown openldap:openldap /etc/ldap/ssl/files/*
Шаг 5: Настройка TLS в конфигурации LDAP
Создайте файл mod_ssl.ldif
, как указано в вашем вопросе:
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/files/ca.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/files/ldap.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/files/ldap.key
Шаг 6: Применение изменений
Используйте команду ldapmodify
для применения изменений:
ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif
Если вы видите ошибку Can't contact LDAP server (-1)
, попробуйте выполнить следующие действия:
- Убедитесь, что
slapd
работает и слушает на портах 389 и 636. Проверьте с помощью команды:
netstat -tulpan | grep slapd
- Проверьте, что права доступа к файловой системе для сертификатов корректны и
openldap
имеет доступ к ним:
sudo -u openldap head -1 /etc/ldap/ssl/files/*
- Проверьте наличие ошибок в AppArmor (если он включен):
sudo journalctl -xeu apparmor
Шаг 7: Настройка клиента для использования LDAPS
На клиентской машине:
- Скопируйте CA сертификат и обновите доверенные сертификаты.
- Измените
/etc/ldap/ldap.conf
, добавив путь к вашему доверенному CA сертификату. - Убедитесь, что параметр в конфигурации включает
ssl start_tls
и измените URI наldaps://
илиldap://
в зависимости от настроек.
Шаг 8: Тестирование подключения
Для тестирования используйте ldapsearch
:
ldapsearch -x -H ldaps://your-ldap-server -d 1
Это должно дать вам подробную информацию, если возникнут какие-либо ошибки подключения или сертификатов.
Заключение
Следуя этим шагам, вы сможете активировать SSL/LDAPS в вашем OpenLDAP-сервере, обеспечивая безопасное соединение для ваших приложений и клиентов. Если возникли дополнительные проблемы, рассмотрите возможность использования отладочных утилит, таких как tcpdump
, для анализа сетевого трафика и выявления потенциальных ошибок.