2013-02-11 3 views
1

Я пытаюсь запросить удаленный сервер LDAP в безопасном соединении в локальной тестовой среде Windows php. Я думаю, что я должен правильно предоставить доступ, потому что я могу использовать приложение для браузера LDAP и прекрасно подключаюсь к удаленному серверу. Кроме того, если я делаю «telnet remoteserverurl.com 636», тогда в командной строке появляется пустой экран, поэтому я, по крайней мере, подключаюсь. Но в моем следующем .php-коде я получаю сообщение об ошибке: «PHP Warning: ldap_bind(): Не удается привязываться к серверу: не удается связаться с сервером LDAP в строке ...»php LDAP bind на безопасном удаленном сервере Ошибка Windows

Тот же код работает в Linux-сервер. Я думаю, что есть какие-то недостающие библиотеки LDAP в моей локальной среде php для безопасного соединения LDAP? В любом случае, вот этот код:

$ds=ldap_connect("ldaps://serveraddress.com", "636"); // remote server 
//$ds=ldap_connect("ldap://localhost", 389); // works 
//putenv('LDAPTLS_REQCERT=never');//doesn't help with secure ldap 
//ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); //works for local LDAP server (Open LDAP) 
$r=ldap_bind($ds, "cn=xxx,ou=proxy,o=xxx", "passwordxxxx");//throws error for remote 

Есть идеи? Благодаря!

+0

Вы проверили, загружены ли наборы? попробуйте phpinfo(). PHP должен поддерживать LDAP и SSL, ваш ldap должен поддерживать SSL –

+0

В phpinfo в разделе LDAP я вижу: Поддержка LDAP включена RCS Version $ Id: ldap.c 313665 2011-07-25 11: 42: 53Z felipe $ Всего Ссылки 0/неограниченное API версии 3001 Имя поставщика OpenLDAP Производитель Версия 20319 SASL поддержка включена – IrfanClemson

ответ

1

Проверьте PHP

найти библиотеки
<?php phpinfo() ?> 

Поскольку вы можете подключиться с помощью клиента LDAP я ожидать, что ваш LDAP работает SSL

ли вы скопировать SSL Cert?

  1. Скопируйте сервер сертификатов в SYS:/php5/каталог серт. Это местоположение настраивается в файле php.ini.

  2. Используйте префикс «ldaps: //» для аргумента имени узла или значение 636 для аргумента номера порта в вызове ldap_connect.

+0

сертификат сервера с удаленного сервера? Как я могу получить? Я не думаю, что у меня есть прямой доступ к этому серверу Linux. Благодарю. – IrfanClemson

+0

Если у вас нет доступа для вставки сертификата, вы, вероятно, завинчиваетесь. Чтобы настроить безопасное соединение, вам нужен этот сертификат. Я не знаю, есть ли способ импортировать его через код или htaccess. Может быть, google, что –

+0

Просто чтобы добавить, попробуйте небезопасное соединение 1 раз, тогда он скажет вам, находится ли он в сертификате или нет. Если вы не можете подключиться к обычным соединениям, это другая проблема. –

0

Я получил эту работу! @ s.lenders «ответ» (спасибо за это) указал на некоторые проблемы с сертификатом, и действительно, это была проблема с сертификатом. У удаления LDAP Server был свой сертификат в состоянии с истекшим сроком действия - я получил предупреждение об этом, даже когда я подключился с помощью настольного приложения (SoftTerra LDAP Browser). Поэтому импортированный сертификат в мои сертификаты Windows - приложение SoftTerra LDAP Browser разрешило мне эту опцию. И, вуаля !. Вызовы SSL LDAP работают.

** Обновление: не уверен, что помог или нет, но вот что-то более конкретное, что помогло мне: похоже, PHP-библиотеки LDAP ищут определенные файлы conf; с жестким кодом: C \ OpenLDAP \ sysconf \ ldap.conf?! Поэтому я в основном создавал новые папки для этой информации и помещал файл ldap.conf только с «TLS_REQCERT never», и это помогает! Я протестировал его. Если я должен удалить этот файл, тогда мои защищенные запросы LDAP не работают и не выполняются на этапе «привязки». Заметьте, мне нравится «никогда» в моем conf, потому что это будет только на моей собственной рабочей станции.

Также обратите внимание, я на Windows 7 управления IIS 7+ **

Надеется, что это поможет кому-то.

4

Знайте старше, но я недавно столкнулся с подобной проблемой при использовании WordPress 3.x & 4.x на Windows 2008 & 2012 (7.x IIS & 8.x, PHP 5.6).

Я написал плагин для аутентификации ldap для wordpress - как пытался получить LDAPS (ldap secure over port 636 работает).

пару вещей:

  1. При использовании PHP LDAPS, документация гласит, просто префикс сервера LDAP с ldaps://. Таким образом, server1.domain.com для LDAPS должно быть ldaps://server1.domain.com/ ... обратите внимание, что вам не нужно передавать порт вообще для способа подключения (за http://php.net/manual/en/function.ldap-connect.php). Это очень похоже на то, что исходный вопрос имеет в его представлении.
  2. Библиотеки Windows PHP жестко закодированы для поиска открытого файла конфигурации ldap (ldap.conf) в C:\openldap\sysconf\ldap.conf.
  3. Создайте текстовый файл, упомянутый в № 2 выше - здесь вы указываете на хранилище сертификатов. После создания этого файла, вы можете положить в TLS_REQCERT never ... но это означает, что неты сертификатов не уточнены, и все они доверяют автоматически (по существу) - должен быть только для тестирования ... никогда для производства, как вы победите часть из мер безопасности TLS/SSL (то есть, удостоверяя, что вы действительно разговариваете с хостом, с которым, как вы считаете, вы подключены).
  4. Вместо небезопасного варианта TLS_REQCERT never, который, кажется, является популярным (и, возможно, ошибочным) предложением на межсетевых экранах ... захватывает общий список государственных сертификатов, используемый завитой и аналогичным - http://curl.haxx.se/ca/cacert.pem. Это, по сути, то, что firefox поставляется для публичных доверенных сертификатов (например, вы можете установить firefox и перейти на https://amazon.com без предупреждения о сертификате и т. Д.).
  5. Загрузите файл cacert.pem, который вы загрузили (это всего лишь текстовый файл с кучей хешей и описаний сертификатов) с вашей установкой PHP. Например, скажем, я сбросил его с моей установкой php в c:\php5\cacert.pem. Ваше местоположение может отличаться, но помещайте его куда-то, к чему его можно получить, и он будет сгруппирован с материалом php, поскольку он связан. Вот несколько снимков содержимого файла cacert.pem, чтобы дать вам представление о том, что внутри. sample cacert.pem content hash example in cacert.pem
  6. Редактировать C:\openldap\sysconf\ldap.conf и добавьте строку для команды TLS_CACERT, как на фото. sample ldap.conf file
  7. Это должно позволить вам теперь доверять общедоступным действительным сертификатам, как это делают современные веб-браузеры, и т. Д. Обратите внимание, что он не будет исправлять проблемы с внутренним выпуском или самозаверяющим сертификатом сертификатов. Но вы также можете легко это сделать, добавив свои собственные хеши сертификатов в файл cacert.pem.
  8. Чтобы добавить еще один сертификат в качестве файла доверия в файл cacert.pem, просто получите копию соответствующего сертификата (вам просто нужно экспортировать его в .cer в формате base64 - не нужен личный ключ и расширение на самом деле не имеет значения - просто должен быть хэш-вывод). Если вы экспортировали его в нужном формате, вы можете открыть файл сертификата и увидеть хэш - он будет похож (но не идентичен) на скриншот здесь примера CA сервера Thawte. Просто добавьте хэш, который вы экспортировали в файл cacert.pem, и ему будет доверено. Если вы хотите быть умным, вы можете вместо этого импортировать сертификат выдачи для своего частного сертификата - это будет доверять любому сертификату, подписанному импортированным сертификатом. Если вы сомневаетесь, вы всегда можете просто импортировать представленный сертификат.
  9. После внесения таких изменений я решил, что лучше перезапустить веб-сервер (диспетчер iis -> узел веб-сервера -> перезапуск), так что все с использованием php было сброшено.
  10. Для дополнительного кредита вы можете использовать тот же файл cacert.pem для реализации curl, отредактировав файл php.ini и поместив полный путь в файл cacert.pem в строке curl.cainfo =.
  11. Опять же, я знаю, что это более старое сообщение, но я хотел поделиться тем, что узнал, подключая Wordpress к eDirectory через LDAPS.
Смежные вопросы