Apache 2.2.31 OpenSSL 1.0.1q на CentOS 6.7


В последнее время все чаще стал сталкиваться с тем, что на серверах нужно каким-то образом обновлять openssl до последней версии.

К сожалению от библиотек OpenSSL зависит очень многое на сервере, поэтому глобально его заменить не получится. Вернее получится, но это приведет к плачевным результатам. Мне как-то удалось собрать rpm пакет OpenSSL 1.0.1n для CentOS 6.5, который успешно заменил OpenSSL 1.0.1e, но после этого на сервере перестали работать демоны Apache и MySQL. Они упорно продолжали искать библиотеки от OpenSSL 1.0.1e и не понимали что такое 1.0.1n.

Пару дней назад меня все же добили, и я решил вернуться к поискам решения этой проблемы.

Без сигарет мозг работает лучше, как оказывается. И вот уже некурящий я понял, что не обязательно переписывать системные библиотеки OpenSSL. Можно скомпилировать последний OpenSSL используя пакет с исходным кодом, при этом оставить системный OpenSSL. На основе его уже создать модуль для Apache. К моему счастью (как потом оказалось. изначально я был несчастлив) клиенту нужен был еще и Apache последней версии ветки 2.2, который в репозитариях CentOS 6.7 недоступен.

На подготовительном этапе установим пару пакетов:

yum install gcc make zlib-devel wget

Дальше я буду работать в папке /usr/local/src. Вы можете выбрать любую другую на свое усмотрение.

Начинаем мы с OpenSSL.

На момент написания этой статьи заменой для 1.0.1e был 1.0.1q. Его и качаем:

wget https://www.openssl.org/source/openssl-1.0.1q.tar.gz

Все собирается очень просто. Главное - не забыть создать shared библиотеку:

./config --prefix=/opt/openssl --openssldir=/opt/openssl/openssl --shared
make
make install

После этого все компоненты, будут лежать в папке /opt/openssl.

Некоторые люди любят использовать префикс "/usr/local". В таком случае все файлы после компиляции будут расположены в следующих папках:

  • /usr/local/bin
  • /usr/local/include
  • /usr/local/lib
  • /usr/local/openssl

Любой другой пакет OpenSSL можно собрать по аналогии.

Для удобства использования можно слинковать бинарник в папку из переменного окружения $PATH:

ln -s /opt/openssl/bin/openssl /usr/bin/openssl101q

Для коректной работы openssl требует Perl модуль 'WWW::Curl::Easy'.

yum install perl-WWW-Curl.x86_64

Apache

Версия Apache не критична. У меня в требованиях было использование последней версии ветки 2.2.

Скачиваем и распаковываем:

wget http://ftp.ps.pl/pub/apache/httpd/httpd-2.2.31.tar.gz
tar xf httpd-2.2.31.tar.gz
cd httpd-2.2.31

Минимальный набор опций для скрипта configure будет следующим:

./configure --prefix=/opt/httpd2 --with-included-apr --enable-ssl=shared --with-ssl=/opt/openssl --enable-ssl-staticlib-deps

Полный набор модулей будет собран с помощью следующей комбинации опций для configure, при этом каждый модуль будет представлен в виде отдельного файла с расширением "so":

./configure --prefix=/opt/httpd2 --enable-ssl=shared --with-ssl=/opt/openssl --enable-ssl-staticlib-deps=shared --enable-mods-static=ssl=shared --enable-exception-hook=shared --enable-maintainer-mode=shared --enable-pie=shared --enable-authn-dbm=shared --enable-authn-anon=shared --enable-authn-dbd=shared --enable-authn-alias=shared --enable-isapi=shared --enable-file-cache=shared --enable-cache=shared --enable-disk-cache=shared --enable-mem-cache=shared --enable-dbd=shared --enable-reqtimeout=shared --enable-ext-filter=shared --enable-substitute=shared --enable-charset-lite=shared --enable-deflate=shared --enable-log-forensic=shared --enable-logio=shared --enable-mime-magic=shared --enable-cern-meta=shared --enable-expires=shared --enable-headers=shared --enable-ident=shared --enable-usertrack=shared --enable-unique-id=shared --enable-proxy=shared --enable-proxy-connect=shared --enable-proxy-http=shared --enable-proxy-scgi=shared --enable-proxy-ajp=shared --enable-proxy-balancer=shared --enable-optional-hook-export=shared --enable-optional-hook-import=shared --enable-optional-fn-import=shared --enable-optional-fn-export=shared --enable-dav=shared --enable-info=shared --enable-suexec=shared --enable-cgi=shared --enable-cgid=shared --enable-dav-fs=shared --enable-dav-lock=shared --enable-vhost-alias=shared --enable-imagemap=shared --enable-speling=shared --enable-rewrite=shared --enable-so --enable-http

Если Вы получили слудеющую ошибку, значит zlib-devel отсутствует в системе:

mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures

Осталось дело за малым:

make
make install

По завершении компиляции все файлы будут лежать в папке /opt/httpd2.
Осталось создать init скрипт и добавить сервис на автозагрузку.

wget -O /etc/init.d/httpd2 http://www.tech-notes.net/wp-content/uploads/2015/12/httpd2
chmod +x /etc/init.d/httpd2
chkconfig httpd2 on

Во время сборки нужные библиотеки не были скопированы в папку Apache, поэтому демон откажется запускаться. Выполните следующее:

ln -s /opt/openssl/lib/libcrypto.so.1.0.0 /opt/httpd2/lib/
ln -s /opt/openssl/lib/libssl.so.1.0.0 /opt/httpd2/lib/

Теперь можно запускать:

/etc/init.d/httpd2 start

Линкуем apachectl:

ln -s /opt/httpd2/bin/apachectl /usr/sbin/apachectl2

Для проверки можно воспользоваться утилитой telnet. Будучи в косоли сервера выполните:

telnet localhost 80

После того как увидие приветствие от сервера apache, выполните:

HEAD / HTTP/1.0

По умолчанию Apache настроен показывать все заголовки, поэтому в ответ вы должны увидеть следующее:
apach-openssl

Послесловие

После этого Вы можете без лишней головной боли обновлять как Apache так и OpenSSL по мере выхода новых версий.

Полезными могут быть следующие статьи:

При написании статьи использовались следующие ресурсы:
blog.ivanristic.com
dan.drydog.com

Share Button
(Visited 477 times, 1 visits today)

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *