Назад | Перейти на главную страницу

Как исправить сбой Apache с PHP + Curl по SSL-запросу?

Мой процесс Apache перестает работать всякий раз, когда я звоню curl_exec() из PHP с URL-адресом "https: //".

Если я использую http вместо того https в качестве транспорта URL-адресов он работает отлично, поэтому я знаю, что curl и другие параметры curl верны.

я могу использовать curl из командной строки на этом сервере, используя https версия URL-адреса, и она работает отлично, поэтому я знаю, что удаленный сервер отвечает правильно, срок действия сертификата не истек и т. д.

Мой сервер:

Linux 2.6.32-21-server #32-Ubuntu SMP Fri Apr 16 09:17:34 UTC 2010 x86_64 GNU/Linux

Моя версия Apache:

Server version: Apache/2.2.14 (Ubuntu)
Server built:   Apr 13 2010 20:21:26

Моя версия PHP:

PHP 5.3.2-1ubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:03:45) 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

Информация о моем модуле PHP curl:

cURL support => enabled
cURL Information => 7.19.7
Age => 3
Features
AsynchDNS => No
Debug => No
GSS-Negotiate => Yes
IDN => Yes
IPv6 => Yes
Largefile => Yes
NTLM => Yes
SPNEGO => No
SSL => Yes
SSPI => No
krb4 => No
libz => Yes
CharConv => No
Protocols => tftp, ftp, telnet, dict, ldap, ldaps, http, file, https, ftps
Host => x86_64-pc-linux-gnu
SSL Version => OpenSSL/0.9.8k
ZLib Version => 1.2.3.3

Рассмотрите возможность добавления следующего:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

Теперь, чтобы увидеть, что происходит, используйте var_dump () или журнал ошибок(). Должно получиться примерно так:

var_dump(curl_exec($ch));

ИЛИ

error_log(curl_exec($ch));

Если вы используете error_log() вы должны найти след в файле error_log.

Если это не поможет, у вас нет выбора, кроме использования strace

method1:

Вы можете попробовать собрать последнюю версию curl 7.49.1 вручную, а затем заменить софт-ссылку на старую curl, обычно она находится в / usr / bin / curl и curl-config. затем исправьте lib в /etc/ld.conf.d/local.conf и выполните команду "ldconfig"

method2:

Прежде всего, стандартная версия curl / libcurl для CentOS 6 достаточно свежая, поэтому вам не понадобятся старые совместимые пакеты (libcurl7155 и т. Д.).

Самый простой способ установить обновленный curl из моего репо - это установить пакет выпуска моего репо. http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm

об / мин -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm

а затем отредактируйте файл /etc/yum.repos.d/city-fan.org.repo, изменив строку с enabled = 1 на enabled = 0, чтобы предотвратить втягивание чего-либо оттуда, когда вы этого не ожидаете.

Затем вы можете увидеть, что произойдет, если вы обновите curl из моего репо, выполнив: yum --enablerepo = city-fan.org update curl

На этом этапе вы можете увидеть, что будет установлено / удалено (я бы ожидал, что он установит / обновит несколько библиотек, а также curl и libcurl, и ничего не удалит), и сказать «да» или «нет» обновлению. . Обновленная версия curl должна нормально работать со всем в CentOS 6.

Я сделал именно это и после перезапуска Apache рад сообщить, что PHP теперь также использует новую версию.

Для меня, играя с различными опциями PHP curl, доступными с curl_setopt () помог мне в прошлом. Попробуйте изменить CURLOPT_SSL_VERIFYPEER и CURLOPT_SSL_VERIFYHOST на ложь, для начала.