2012-01-19 2 views
0

У меня очень простой скрипт php ldap, который работает только при работе с Zend и Apache. Когда я запускаю этот скрипт из командной строки, он проходит. Запуск strace, я вижу, как меняется поведение, но я не могу понять, почему. Я подтвердил, что тот же ldap.conf читается и загружается тот же ldap.so.Ошибка LDAP с Zend/Apache

Я считаю, что это из-за проблемы с сертификатом, но мои настройки должны игнорировать проблемы с сертификатами.

Информация о версии (они выглядят одинаково между работает с PHP и Apache):

OpenSSL: 0.9.8o 01 Jun 2010 
OpenLdap: $Id: ldap.c 313665 2011-07-25 11:42:53Z felipe $ 
Zend:  5.5 
PHP:  5.3.8 


<?php 
     ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 
     putenv('LDAPTLS_REQCERT=never'); 
     $ds = ldap_connect("ldaps://myserver.com:636"); 
     $db = ldap_bind($ds, 'user', 'pass'); 
?> 

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

При работе под Apache, я получаю след от LDAP:

ldap_create 
ldap_url_parse_ext(ldaps://myserver.com:636) 
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 myserver.com:636 
ldap_new_socket: 20 
ldap_prepare_socket: 20 
ldap_connect_to_host: Trying <myip>:636 
ldap_pvt_connect: fd: 20 tm: -1 async: 0 
TLS trace: SSL_connect:before/connect initialization 
TLS trace: SSL_connect:SSLv2/v3 write client hello A 
TLS trace: SSL_connect:SSLv3 read server hello A 
TLS certificate verification: depth: 0, err: 20, subject: /CN=mycn.com, 
    issuer: /CN=Collaboration Services CA 
TLS certificate verification: Error, unable to get local issuer certificate 
TLS trace: SSL_connect:SSLv3 read server certificate A 
TLS trace: SSL_connect:SSLv3 read server certificate request A 
TLS trace: SSL_connect:SSLv3 read server done A 
TLS trace: SSL_connect:SSLv3 write client certificate A 
TLS trace: SSL_connect:SSLv3 write client key exchange A 
TLS trace: SSL_connect:error in SSLv3 write finished A 
TLS trace: SSL_connect:error in SSLv3 write finished A 
TLS: can't connect: error:140D308A:SSL routines:TLS1_SETUP_KEY_BLOCK:cipher or hash unavailable. 
ldap_err2string 

При выполнении тот же сценарий, используя тот же PHP исполняемый в командной строке я получаю:

ldap_create 
ldap_url_parse_ext(ldaps://myserver.com:636) 
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 myserver.com:636 
ldap_new_socket: 4 
ldap_prepare_socket: 4 
ldap_connect_to_host: Trying <my ip>:636 
ldap_pvt_connect: fd: 4 tm: -1 async: 0 
TLS trace: SSL_connect:before/connect initialization 
TLS trace: SSL_connect:SSLv2/v3 write client hello A 
TLS trace: SSL_connect:SSLv3 read server hello A 
TLS certificate verification: depth: 0, err: 20, subject: /CN=myserver.com, issuer: /CN=Collaboration Services CA 
TLS certificate verification: Error, unable to get local issuer certificate 
TLS trace: SSL_connect:SSLv3 read server certificate A 
TLS trace: SSL_connect:SSLv3 read server certificate request A 
TLS trace: SSL_connect:SSLv3 read server done A 
TLS trace: SSL_connect:SSLv3 write client certificate A 
TLS trace: SSL_connect:SSLv3 write client key exchange A 
TLS trace: SSL_connect:SSLv3 write change cipher spec A 
TLS trace: SSL_connect:SSLv3 write finished A 
TLS trace: SSL_connect:SSLv3 flush data 
TLS trace: SSL_connect:SSLv3 read finished A 
ldap_open_defconn: successful 
ldap_send_server_request 
+0

Что вы видите, проблема с OpenSSL. Сравните информацию OpenSSL, показанную 'phpinfo()', с показанной 'php-i', и я подозреваю, что вы увидите другую информацию - возможно, из-за разных ini-файлов или, возможно, версию PHP/OpenSSL, используемую в терминале, полностью отличается от Apache. Если вы отредактируете вопрос с соответствующими LDAP и связанными с OpenSSL выводами вышеуказанных команд, мы можем взглянуть на потенциальные причины/решения ... – DaveRandom

+0

Спасибо, я сделал, как вы сказали, и я не могу найти никаких различий. Такие же ini-файлы, те же версии openssl (OpenSSL 0.9.8o), ldap, php и т. Д. – AdamC

+0

Какая у вас ОС? – DaveRandom

ответ

1

я, наконец, исправлено это при проверке результатов работы strace, показал, что у него не было разрешения открыть файл ldap.conf. Разрешения на открытие исправили проблему. Однако файл не требуется, поскольку он имеет только одну и ту же настройку из переменной окружения:

putenv ('LDAPTLS_REQCERT = never');

Смежные вопросы