Два сервера с одинаковой конфигурацией - ldap_bind работают на одном, сбой на другом

Я только что развернул сервер разработки с идентичной конфигурацией как производство (CentOS 6.5, тот же стек AMP). Раньше мне приходилось запускать экземпляр разработки на том же компьютере (под другим виртуальным хостом на основе IP). ldap_bind отлично работал в старой установке моноблока.

У меня есть отдельные файлы ssl crt для производства и разработки (prod & dev). После настройки новой машины (с использованием марионетки - такой же конфигурации, как и производство) я скопировал файлы разработки crt и обеспечил загрузку конфигурации apache OK. Тот же IP-адрес используется для разработки, как и раньше.

Когда я пытаюсь пройти аутентификацию против ldap в системе разработки, я получаю следующую ошибку:

Предупреждение PHP: ldap_bind() [function.ldap-bind]: невозможно связать с сервером: не удается связаться с сервером LDAP в /some/path/function/functions_security.php в строке 1234, referer: <a href="http://my.application.com/somescript.php" rel="nofollow noreferrer" target="_blank">http://my.application.com/somescript.php</a>

Строка 1234 of somescript.php - это

$ r = ldap_bind ($ ldap_conn, $ srvc_dn, $ srvc_pass);

Нет необходимости в публикации параметров, поскольку они идентичны между системами производства и разработки. Продукция работает безупречно.

Я подтвердил, что на сервере ldap в поставляемом порту нет проблем с брандмауэром или сетью на telnetting машины разработки. Я могу подключиться просто отлично.

Парень сети говорит, что причина неудачи запросов заключается в том, что я не "импортировал сертификаты в магазин" в системе разработки. Я немного искал Google, но, возможно, я не использую правильные ключевые слова - я не нахожу, как проверить, какие сертификаты находятся в моем хранилище ключей.

Я видел некоторую документацию для keytool, где она может отображать сертификаты в файле.jks, но я не могу найти файл.jks в системах производства или разработки.

Некоторые подсказки/ключевые слова/предложения будут очень полезны, поскольку я в настоящее время застрял.

3 ответа

Я должен был сделать две вещи, чтобы заставить это работать.

1) Скопировал мои сертификаты сервера на TLS_CACERTDIR в /etc/openldap/ldap.conf.

2) Ran /usr/sbin/cacertdir_rehash на TLS_CACERTDIR. Этот шаг, по-видимому, важен, поскольку я использую CentOS 6.

После этого LDAP работал с ldapsearch и с PHP ldap_bind.


На любой машине, на которой установлена openssl (думаю, обе эти машины для openssl s_client -connect myserver:ldaps), попробуйте openssl s_client -connect myserver:ldaps. Замените myserver с именем вашего сервера и ldaps с портом, если он не является стандартом (636). Нажмите CTRL + C и прокрутите назад до команды. Вы должны увидеть что-то вроде

CONNECTED(00000003)
depth=2 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
verify return:1
depth=1 /C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
verify return:1
depth=0 /description=zACEv54DP1HaZ8cR/C=DE/CN=XXXX.xxxx.xxxx.com/emailAddress=[removed_email]
verify return:1
---
Certificate chain
 0 s:/description=zACEv54DP1HaZ8cR/C=DE/CN=xxxx.xxxx.xxxx.com/emailAddress=[removed_email]
 i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
 1 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 1 Primary Intermediate Server CA
 i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
 2 s:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
 i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Certification Authority
---

Ваш ЦС будет другим, но в этом примере показаны сертификаты, включая сертификаты ЦС, установленные на сервере. Проверьте, существует ли разница между prod и dev, которые не могут быть объяснены файлом prod/dev crt, или если нет разницы там, где должна быть (часть CN = xxxx.xxx). Это может помочь вам узнать, что не так с сертификатами. Или, если вы не получите CONNECTED(00000003) на одном из серверов, тогда ldap там не работает.

Другое дело: вы говорите, что I copied over the development crt files. Вы тоже скопировали ключ? Вы перезапустили сервер ldap после копирования файлов?


Я считаю, что сертификаты хранятся в /etc/pki/tls/certs/ на CentOS. Вы можете сравнить то, что есть на вашей машине разработки, на том, что есть на вашей машине

licensed under cc by-sa 3.0 with attribution.