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

обновление до apache 2.4.9 ошибка opensssl SSL_get_srp_userinfo

Я использую Centos 6.5 2.6.32-431.11.2.el6.x86_64.

У меня есть Apache PHP и openssl, которые я скомпилировал из исходников

apache2.4.7 php 5.5.10 openssl 1.0.1f

Я успешно обновил apache до 2.4.7 на другом экземпляре, но на этом сервере я получаю следующую ошибку.

httpd: Syntax error on line 129 of /usr/local/apache2/conf/httpd.conf: Cannot load   modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: SSL_get_srp_userinfo

моя конфигурация для openssl

./config --prefix=/usr/local --openssldir=/usr/local/openssl -fPIC

моя конфигурация для apache, которая является config.nice для предыдущей установки 2.4.7,

"./configure" \
"--enable-so" \
"--with-included-apr" \
"--enable-ssl" \
"--with-ssl=/usr/local/openssl" \

Я вижу из config.status, что он ищет в нужном месте ssl

S["MOD_SSL_LDADD"]="-export-symbols-regex ssl_module"
S["ab_LDFLAGS"]="-L/usr/local/openssl/lib -lssl -lcrypto -lrt -lcrypt -lpthread"
S["ab_CFLAGS"]="-I/usr/local/openssl/include"

однако при выполнении ldd на фактическом mod_ssl.so показывает нечто совершенно иное, чем то, что я вижу на всех других установках apache, с которыми я работал с mod_ssl.

нормально на всей рабочей установке вижу что-то вроде

# ldd /usr/local/apache2/modules/mod_ssl.so
    linux-vdso.so.1 =>  (0x00007fff489ff000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f839028d000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f8390056000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f838fe38000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f838faa5000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f83908bd000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007f838f843000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f838f63e000)[/CODE]

однако в этой конкретной установке я вижу

# ldd /usr/local/apache2/modules/mod_ssl.so
    linux-vdso.so.1 =>  (0x00007ffff1bff000)
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f93f743b000)
    librt.so.1 => /lib64/librt.so.1 (0x00007f93f7232000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f93f6ffb000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f93f6dde000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f93f6a49000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f93f6805000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f93f651f000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f93f631a000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f93f60ee000)
    libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f93f5d0e000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f93f5b09000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f93f58f3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f93f7a7b000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007f93f567c000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f93f5470000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f93f526d000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f93f5053000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f93f4e33000)[/CODE]

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

Любые предложения приветствуются.

Спасибо,

Я добавляю этот ответ только для того, чтобы другие, кто приходит, не были введены в заблуждение тем, что вы пытались сделать, и (очень хорошей) помощью, которую оказали другие.

Вы делаете это совершенно неправильно. Вы должны понимать, как Red Hat и, следовательно, CentOS борются с уязвимостями и исправлениями. Вы можете прочитать более полную версию здесь, но по сути: предположим, что EL6 (и, следовательно, C6) поставляется с пакетом, называемым foo, в версии 1.1.1. Когда уязвимость обнаружена в foo-1.1.1, и проект выпускает 1.1.2, RH берет исправление и переносит его обратно в версию 1.1.1, выпуская RPM под названием (скажем) foo-1.1.1-2.

Пока вы следите за своими патчами, вы остаетесь свободными от всех известных уязвимостей, которые влияют на foo 1.1.1, но foo --version продолжу сообщать 1.1.1.

Некоторым аудиторам безопасности это очень трудно понять, особенно тем, кто нанимает обезьян с контрольными списками версий. Я не могу сосчитать количество отчетов аудита PCI, которые мне приходилось опровергать, мучительно просматривая каждый так называемый "уязвимость"они сообщают, и анализ журналов изменений RH показывает, что каждая ошибка CVE уже была рассмотрена. (Я лично считаю аудиторов PCI, которые считают, что контрольные списки версий являются правильным способом проверки уязвимостей, как профессионально мошеннические, но это отдельный аргумент). Но для систем RH / CentOS и других, которые следуют той же схеме установки исправлений (которая является большинством основных дистрибутивов), это правильный способ справиться с этими аудитами.

Но что еще хуже, то, что вы делаете активно вредит безопасность. Для каждого пакета, который вы решили обновить вручную, Теперь ты должен быть в курсе. Вы должны отслеживать каждый проект отдельно, и каждый раз, когда они выпускают новую версию, вы должны обновляться, дестабилизируя вашу систему и вызывая простои. Более того, вы должны делать это сразу после выпуска, а не только при каждом аудите, в противном случае вы будете запускать систему, которая большую часть времени активно небезопасна.

Шутки в сторону: не делай того, что делаешь. Это неправильно. Это опасно. Это чертовски много работы без реальной выгоды.

В порядке,

Решением было поместить фактическую конфигурацию LDFLAGS в фактическую конфигурацию. так это должно выглядеть так

LDFLAGS="-L/usr/local/lib64"; export LDFLAGS
"./configure" \
"--enable-so" \
"--with-included-apr" \
"--enable-ssl" \
"--with-ssl=/usr/local/openssl" \
"LDFLAGS=-L/usr/local/lib64" \
"$@"

Я использую CentOS 6.5 2.6.32-431.17.1.el6.x86_64, в основном для поддержки контейнеров сервлетов Java.

Благодаря вашему автоответу я смог создать и запустить httpd с SSL. Прорывом для меня было создание как openssl, так и httpd с PIC / pie в зависимости от ситуации.

В этом контексте использовались аргументы config для OpenSSL 1.0.1h 5 июня 2014 г.

cd openssl-1.0.1h
./config -fPIC --prefix=/usr/local --openssldir=/usr/local/openssl
    make
    make test
    sudo make install

config для Apache / 2.4.9 (Unix) APR 1.5.1, APR-UTIL 1.5.3 был этим контекстом

export LDFLAGS=”-L/usr/local/lib64”
./configure  --prefix=/usr/local/httpd \
   --enable-so \
   --enable-pie \
   --with-apr=/usr/local/apr/bin/apr-1-config \
   --enable-ssl \
   --with-ssl=/usr/local/openssl \
   --enable-allowmethods \
   --enable-info \
   --enable-speling \
   --with-mpm=prefork \
   LDFLAGS=-L/usr/local/lib64 \
   $@

И изменения, которые я внес в httpd.conf до того, как он заработал, были:

User apache
Group apache

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

Include conf/extra/httpd-ssl.conf

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

conf / extra / httpd-ssl.conf