Вопрос по ssl-certificate, client-certificates, ldap, active-directory, php – Аутентификация самозаверяющего сертификата для соединения LDAPS

6

Я хочу сделать безопасное соединение ldap (ldaps) из клиента Linux (Linux 3.2.0-4-amd64 # 1 SMP Debian 3.2.51-1 x86_64 GNU / Linux) на сервер Windows 2012, чтобы изменить пароли пользователей в активном каталог, через php. Для этого я создал самозаверяющий сертификат (с помощью диспетчера Windows Server) на сервере, но при попытке подключиться я получаю следующую ошибку (включив параметр отладки:ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);):

ldap_create                                                                 
ldap_url_parse_ext(ldaps://xxx.xxx.xxx.xxx)                                 
ldap_bind_s                                                                 
ldap_simple_bind_s                                                          
ldap_sasl_bind_s                                                            
ldap_sasl_bind                                                              
ldap_send_initial_request                                                   
ldap_new_connection 1 1 0                                                   
ldap_int_open_connection                                                    
ldap_connect_to_host: TCP xxx.xxx.xxx.xxx:636                               
ldap_new_socket: 3                                                          
ldap_prepare_socket: 3                                                      
ldap_connect_to_host: Trying xxx.xxx.xxx.xxx:636                            
ldap_pvt_connect: fd: 3 tm: -1 async: 0                                     
TLS: peer cert untrusted or revoked (0x42)                                  
TLS: can't connect: (unknown error code).                                   
ldap_err2string                                                             
PHP Warning:  ldap_bind(): Unable to bind to server 

Кажется, клиент не может доверять сертификату, поскольку он самоподписан.

Какие шаги я должен предпринять, чтобы установить безопасное соединение? Сертификаты на стороне клиента хранятся в/etc/ssl/certs/ca-certificates.crt

Нужно ли доверять сертификату сервера и выполнять проверки или имеет значение только шифрование? Каково содержимое вашего файла ldap.conf? NaeiKinDus
Просто линияTLS_CACERT /etc/ssl/certs/ca-certificates.crt Anant Gupta

Ваш Ответ

3   ответа
4

поэтому, чтобы доверять этому, клиенту LDAP необходим сертификат для CA, который создал этот сертификат.

Поместите файл сертификата вашего CA в/etc/ldap/certs/myca.pem (возможно, вам придетсяmkdir справочник сертификатов).

Добавить новую строку сTLS_CACERT /etc/ldap/certs/myca.pem в/etc/ldap/ldap.conf, (Вы можете увидеть похожую строку с "/etc/ssl/certs/ca-certificates.crt".)

$ php -a
Interactive mode enabled
php > ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
...
ldap_init: using /etc/ldap/ldap.conf
...
php > $conn = ldap_connect("your_ldap_server");
php > ldap_start_tls($conn);

Без изменения конфигурации вы увидитеPHP Warning: ldap_start_tls(): Unable to start TLS: Connect error in php shell code on line 1, Комментарии кфункциональная документация обеспечить дальнейшее чтение, но все, кажется, идут прямо к установке "TLS_REQCERT никогда". Работаем! = Безопасно.demand это настройка по умолчанию, и я бы оставил это так (или явно установить это). Документация по TLS_REQCERTВот, (Похоже также, что если вы установите «никогда», но последуете с более поздней строкой «TLS_CACERT», она игнорирует никогда. Тьфу.)

Замечания: Я знаю, что вы использовали "ldaps: //" и ldap_bind (), но попробуйтепредпочтительным ldap_start_tls ().

STARTTLS - это альтернативный подход, который сейчас является предпочтительным методом шифрования соединения LDAP.

5

аты. Вы можете сделать это, добавив в файл ldap.conf следующее:

TLS_REQCERT never

Это решение не является предпочтительным, хотя. Вы должны добавить требуемый корень CA на свой клиент и убедиться, что сертификат правильно сгенерирован с именем сервера в нем (и если моя память обслуживает меня по всей цепочке CA), иначе ничто не остановит кого-либо для выполнения атаки MITM.

Я был бы рад, если бы вы могли помочь мне выяснить, как добавить корень CA и обеспечить правильность сертификата. Anant Gupta
Спасибо! Это сработало! Anant Gupta
Это решено. Мой новый пароль не соответствует критериям. Спасибо :) Anant Gupta
Либо вы указали несуществующий / защищенный атрибут, либо изменили имя пользователя || кортеж пароля и ваше соединение с сервером ldap больше не является действительным (в этом случае вам нужно запустить новый). NaeiKinDus
2

кто сталкивается с этим, PHP7.1 теперь позволяет вам установить файл CA и каталог CA черезldap_set_option() вместо того, чтобы обновлять файл конфигурации сервера.

Смотрите документацию дляldap_set_option здесь, обращая внимание наLDAP_OPT_X_TLS_ опции:https://secure.php.net/manual/en/function.ldap-set-option.php

Одно предостережение: кажется, может быть ошибка, когдаLDAP_OPT_X_TLS_CACERTFILE принимается только тогда, когдаLDAP_OPT_X_TLS_CACERTDIR также установлено, см.https://bugs.php.net/bug.php?id=73558, Я еще не проверил это.

Похожие вопросы