Я пытаюсь проверить подключение к серверу LDAP Google Workspace. Я следую этой странице справки :https://support.google.com/a/answer/9190869?hl=en#ldap-query&zippy=%2Cldapsearch
. Но когда я запускаю предложенные команды, я получаю эту ошибку:
root@debian:/etc/freeradius/3.0# LDAPTLS_CERT=/etc/freeradius/3.0/certs/ldap-client.crt LDAPTLS_KEY=/etc/freeradius/3.0/certs/ldap-client.key ldapsearch -v -H ldaps://ldap.google.com:636 -b dc=MYDOMAIN,dc=cz '(mail=MYUSERNAME@MYDOMAIN.cz)'
ldap_initialize( ldaps://ldap.google.com:636/??base )
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
additional info: (unknown error code)
Есть идеи, что не так?
В Ubuntu 20.04 я обнаружил, что мне пришлось отключить TLS1.3, установив LDAPTLS_CIPHER_SUITE='NORMAL:!VERS-TLS1.3'
, чтобы заставить ldapsearch работать с Google LDAP.
Как я сюда попал:
Команда ldapsearch поддерживает печать расширенной отладки на консоль с помощью флага -d debuglevel
. Уровень отладки 1(-d1
)был для меня достаточным, более высокие уровни отладки становятся очень многословными и трудными для чтения.
Простая команда отладки могла бы выглядеть так:
vagrant@focal:~$ ldapsearch -H ldaps://ldap.google.com:636 -d1
Отсюда я мог видеть, что сертификат не является доверенным:
...
attempting to connect:
connect success
TLS: peer cert untrusted or revoked (0x42)
TLS: can't connect: (unknown error code).
...
Это не имело никакого смысла. Сертификат, возвращенный ldap.google.com, был действительным и мог быть проверен на соответствие моему /etc/ssl/certs/ca-certificates.crt
с помощью openssl s_client -connect ldap.google.com:636 -CAfile /etc/ssl/certs/ca-certificates.crt
, но ldapsearch не доверял ему.
В конце концов я наткнулся на это сообщение в списке рассылки OpenLDAP, в котором объяснялась проблема с отсутствием поддержки SNI, из-за чего Google возвращал недействительный-подписанный сертификат. Мне не удалось найти подходящее решение, но приведенный ниже обходной путь для отключения TLS1.3 путем установки переменной среды LDAPTLS_CIPHER_SUITE
сработал для меня, потому что мой OpenLDAP использовал GnuTLS. Если вы используете OpenSSL, вам, вероятно, потребуется найти другой обходной путь, но основная причина, вероятно, все та же.