Я пытаюсь использовать ldap с ssl на Server 2008 R2. Все готово, и я могу подключиться с помощью ldp.exe к domain.example.org
порт 636 с флажком ssl. Это на самом локальном сервере.
Однако - я не могу подключиться с помощью ldapsearch, используя ssl и порт 636. Никакие ssl и порт 389 не работают нормально с ldapsearch.
Любые идеи? Нужен ли моим клиентам сертификат или что-то в этом роде? В основном я просто хотел, чтобы соединения ldap были зашифрованы. Спасибо за любую помощь!
* Редактировать *
Команда, которая работает:
ldapsearch -x -b "dc=XX,dc=example,dc=org" -D "user@example.org" -H ldap://XX.example.org -W '(&(proxyAddresses=smtp*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
Команда, которая не работает:
ldapsearch -x -b "dc=XX,dc=example,dc=org" -D "user@example.org" -H ldaps://XX.example.org:636 -W '(&(proxyAddresses=smtp*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
Я пробовал варианты -h и использовал -p для указания порта.
Как мне установить сертификат с сервера 2008 на клиент?
Вашим клиентам не нужен собственный сертификат. Им просто нужно доверять сертификату центра сертификации (или цепочке сертификатов), который подписал сертификат сервера LDAP. Вам не нужно было беспокоиться об этом на локальном хосте, потому что сертификат CA уже был доверенным по умолчанию.
Из вашего вопроса неясно, является ли сервер LDAP также центром сертификации и использует ли он сертификат CA в качестве сертификата LDAP. Обычно это два разных сертификата, и центр сертификации находится на другом компьютере.
Некоторый быстрый поиск в Google указывает на то, что вы можете установить в ldap.conf параметр под названием TLS_CACERT или эквивалентную переменную среды с именем LDAPTLS_CACERT, который вы можете указать на файл, содержащий любые / все сертификаты CA в вашей среде (в кодировке base64).
Если в вашей среде есть только один ЦС, вы сможете загрузить версию его общедоступного сертификата в кодировке base64. И если вы можете найти только версию в кодировке DER, вы можете использовать openssl для преобразования ее в base64.
openssl x509 -inform der -in cacert.crt -out cacert.pem
К сожалению, его поведение вполне ожидаемо. LDAP в этом плане просто странный, по крайней мере, для Windows AD. Нет такой вещи, как ldaps
, но если вы укажете номер порта, произойдет шифрование. Попробуйте эту команду:
ldapsearch -x -b "dc=XX,dc=XXX,dc=org" -D "user@XXX.org" -H ldap://XX.XXX.org:636 -W '(&(proxyAddresses=smtp*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))'
В большинстве случаев, кроме LDAP, похоже, что вы запрашиваете простой текстовый трафик на порт службы по умолчанию для SSL. LDAP будет передавать здесь зашифрованный трафик.
Мне это тоже не нравится, потому что из-за этого очень сложно проверить это шифрование происходит. При смене порта, возможно, он просто отправляет простой текст через зашифрованный порт, но с явной схемой / протоколом вы можете знать это по крайней мере пытается. Явные схемы протоколов также упрощают запуск вещей на нестандартных портах, когда это необходимо. Но как ни крути, но так оно и есть.