Назад | Перейти на главную страницу

Ошибка «Не удается связаться с сервером LDAP (-1)» для LDAPS на Server 2012

При попытке подключиться к Active Directory на Windows Server 2012 (возможно R2) над LDAPS, ldapsearch выдает одну из следующих ошибок (в конце более длинного вывода):

$ ldapsearch -H ldaps://my.ad.com -v -b "dc=my,dc=ad,dc=com"
...
ldap_sasl_interactive_bind_s: Can't contact LDAP server (-1)
    additional info: A TLS packet with unexpected length was received.

или

$ ldapsearch -H ldaps://my.ad.com -v -b "dc=my,dc=ad,dc=com" -D "user@my.ad.com"
...
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

или

$ ldapsearch -H ldaps://my.ad.com -d 1 -v -b "dc=my,dc=ad,dc=com" -D "user@my.ad.com" -W
...
TLS: can't connect: A TLS packet with unexpected length was received..
ldap_err2string
ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)

Сертификат SSL был установлен и проверен с помощью s_client, например:

openssl s_client -connect my.ad.com:636 -CApath /etc/ssl/certs/

... который генерирует действительный вывод, заканчивающийся чем-то вроде:

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-SHA384
    Session-ID: 2938000006304A580F4FA7C47F3C0C64FCF43B83B666D24B247775E24DC6B5B1
    Session-ID-ctx:
    Master-Key: C835DACE990D164C2F97F594B1D6989179735CE38AD822165F7C20C99C826DEE7E91816693AA72B08ADD85EDB6493578
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1490979674
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

Эта проблема может возникнуть из-за того, что реализация TLS 1.2 в Windows 2012 несовместима с некоторыми версиями библиотек Linux, например gnutls.

Если это ваша проблема, отключение TLS 1.2 восстановит функциональность. Вам могут быть доступны следующие варианты:

В Linux CLI (может потребоваться избежать восклицательного знака, найдено Вот):

export LDAPTLS_CIPHER_SUITE=NORMAL:!VERS-TLS1.2

В PHP в Linux (найдено Вот и Вот):

putenv(‘LDAPTLS_CIPHER_SUITE=NORMAL:!VERS-TLS1.2’);

В Windows Server 2012 я не могу найти кратких инструкций, но это записи реестра. Прямое редактирование реестра может быть опасным, поэтому используйте его с осторожностью.