Ошибка при сборке Apache 2.4.25 из исходников с open ssl 1.1.0c

Вопрос или проблема

Я успешно собрал Apache 2.4.25 с OpenSSL 1.0.2.

Но из-за некоторых уязвимостей безопасности, которые мы обнаружили в наших внутренних тестах, меня попросили обновить OpenSSL до последней версии. Поэтому я пытаюсь собрать Apache httpd 2.4.25 с OpenSSL 1.1.0c (или) 1.1.0d.

Моя среда

lsb_release -a
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Release:        5.11
Codename:       Tikanga

Perl:           5.24
PCRE:           8.38
APR:            1.5.2
APR-util:       1.5.4
OpenSSL:        1.1.0c / 1.1.0d

Все вышеперечисленные зависимости Apache были успешно собраны и установлены.

Apache 2.4.25 – Этапы установки

cd /my/softwares
tar -xvf httpd-2.4.25.tar -C /my/build/

cd /my/build/httpd-2.4.25/

./configure --prefix=/my/apache-httpd-2.4.25 \
    --with-pcre=/my/dependencies/pcre-8.38/ \
    --with-apr=/my/dependencies/apr-1.5.2 \
    --with-apr-util=/my/dependencies/apr-util-1.5.4 \
    --enable-ssl \
    --with-ssl=/usr/local/ssl-1.1.0c \
    --enable-ssl-staticlib-deps \
    --enable-mods-static=ssl

make // см. ошибки ниже
make install

Я получаю нижеуказанную ошибку при сборке Apache из исходников с OpenSSL. Пожалуйста, помогите мне в правильном направлении.

ssl_engine_init.c: В функции 'make_dh_params':
ssl_engine_init.c:61: ошибка: разыменование указателя на неполный тип
ssl_engine_init.c:62: ошибка: разыменование указателя на неполный тип
ssl_engine_init.c:63: ошибка: разыменование указателя на неполный тип
ssl_engine_init.c:63: ошибка: разыменование указателя на неполный тип
ssl_engine_init.c: В функции 'ssl_init_ctx_protocol':
ssl_engine_init.c:519: предупреждение: 'TLSv1_client_method' устарел (объявлен в /usr/local/ssl-1.1.0c/include/openssl/ssl.h:1598)
ssl_engine_init.c:520: предупреждение: 'TLSv1_server_method' устарел (объявлен в /usr/local/ssl-1.1.0c/include/openssl/ssl.h:1597)
ssl_engine_init.c:525: предупреждение: 'TLSv1_1_client_method' устарел (объявлен в /usr/local/ssl-1.1.0c/include/openssl/ssl.h:1604)
ssl_engine_init.c:526: предупреждение: 'TLSv1_1_server_method' устарел (объявлен в /usr/local/ssl-1.1.0c/include/openssl/ssl.h:1603)
ssl_engine_init.c:530: предупреждение: 'TLSv1_2_client_method' устарел (объявлен в /usr/local/ssl-1.1.0c/include/openssl/ssl.h:1610)
ssl_engine_init.c:531: предупреждение: 'TLSv1_2_server_method' устарел (объявлен в /usr/local/ssl-1.1.0c/include/openssl/ssl.h:1609)
ssl_engine_init.c: В функции 'ssl_init_ctx_session_cache':
ssl_engine_init.c:641: предупреждение: передача аргумента 2 функции 'SSL_CTX_sess_set_get_cb' из несовместимого типа указателя
ssl_engine_init.c: В функции 'use_certificate_chain':
ssl_engine_init.c:861: предупреждение: неявное объявление функции 'BIO_s_file_internal'
ssl_engine_init.c:861: предупреждение: передача аргумента 1 функции 'BIO_new' делает указатель из целого без преобразования
ssl_engine_init.c: В функции 'ssl_init_server_certs':
ssl_engine_init.c:1201: ошибка: разыменование указателя на неполный тип
make[3]: *** [ssl_engine_init.lo] Ошибка 1
make[3]: Уход из директории `/my/build/httpd-2.4.25/modules/ssl'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Уход из директории `/my/build/httpd-2.4.25/modules/ssl'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Уход из директории `/my/build/httpd-2.4.25/modules'
make: *** [all-recursive] Ошибка 1

Почему вам нужно собирать Apache с динамически связанными библиотеками ssl? Это довольно плохая идея, на мой взгляд. С динамически связанными библиотеками вы можете просто обновить ssl по мере необходимости. С статическими библиотеками вам нужно будет перекомпилировать apache каждый раз, когда ssl будет исправлен.

Из одного из комментариев пользователей в сети

На данный момент, с последней версией Apache HTTPD 2.4.25, ветка 2.4 еще не совместима с OpenSSL 1.1.x, так что нужно использовать последнюю 1.0.2x и быть в курсе вопросов безопасности.

Нет официального заявления, поскольку OpenSSL 1.1.x стал стабильным практически “вчера”, у разработчиков не было времени адаптировать ветку 2.4 к этому, об этом можно в основном прочитать в списке рассылки dev и user httpd.

Ответ или решение

При сборке Apache 2.4.25 с OpenSSL 1.1.0c (или 1.1.0d) могут возникнуть ошибки, как это описано в вашем вопросе. Давайте разберем проблему детально и постараемся найти решение.

Контекст

Вы успешно собрали Apache 2.4.25 с OpenSSL 1.0.2, однако для устранения уязвимостей был запрошен переход на более новую версию OpenSSL. Подход к сборке Apache с новыми библиотеками требует от вас точности и понимания совместимости версий.

Ошибки сборки

Исходя из предоставленных ошибок, основная проблема заключается в несоответствии ABI (Application Binary Interface) между версиями Apache и OpenSSL. Конкретно, ошибки, связанные с "dereferencing pointer to incomplete type", указывают на то, что структура или тип данных, используемый в коде Apache, не совпадает с тем, что предоставляется в OpenSSL 1.1.x.

Основные проблемы

  1. Совместимость версий: Желание собрать Apache 2.4.25 с OpenSSL 1.1.x осложняется тем, что ветка 2.4.x Apache HTTPD не была изначально разработана для совместимости с версиями 1.1.0 и выше. Как указывалось в комментарии, поддержка OpenSSL 1.1.x для Apache 2.4.x могла не быть завершена на момент выхода OpenSSL 1.1.x.

  2. Депрекация методов: Предупреждения о том, что методы, такие как TLSv1_client_method, устарели означают, что в OpenSSL 1.1.x произошло значительное изменение в API. Это требует изменений в коде Apache для работы с новыми методами, что не всегда возможно.

  3. Глубокая интеграция SSL: Сборка с опцией --enable-ssl-staticlib-deps требует точного соответствия версий, что добавляет сложности, особенно в случае значительных обновлений библиотеки.

Рекомендации

Для успешной сборки Apache с OpenSSL вам следует рассмотреть следующие шаги:

  1. Используйте OpenSSL 1.0.2: Наиболее безопасный путь — вернуться к OpenSSL 1.0.2 и продолжать обновления безопасности на этой базе, пока рабочая версия Apache 2.4.x не станет полностью совместимой с OpenSSL 1.1.x.

  2. Обновление Apache: Если ваша инфраструктура позволяет, рассмотрите возможность перехода к более новой версии Apache (например, 2.4.51 или выше), которая уже имеет поддержку OpenSSL 1.1.x.

  3. Мониторинг репозитория Apache: Следите за официальными репозиториями Apache и сообществом разработчиков на предмет появления исправлений и обновлений, касающихся совместимости с OpenSSL.

  4. Тестирование в тестовой среде: Если вы все же решите попытаться собрать Apache с OpenSSL 1.1.x, используйте тестовую среду, чтобы избежать сбоев в рабочей системе. Это позволит вам экспериментировать с различными конфигурациями, не рискуя стабильностью сервиса.

  5. Документация: Внимательно изучайте официальную документацию Apache и OpenSSL по указанной проблематике. Порой небольшие изменения могут оказать значительное влияние на совместимость.

Заключение

Сборка Apache 2.4.25 с OpenSSL 1.1.x может вызвать значительные сложности из-за несовместимости и изменений в API. Рекомендуется придерживаться более старой, но проверенной версии OpenSSL или обновить Apache до версии, которая смягчает эти проблемы. Обратите внимание на поддержку сообщества и официальные обновления.

Если возникнут дополнительные вопросы или нужно будет больше информации, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...