Перестройка PHP с использованием обновленной версии OpenSSL

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

Моя текущая конфигурация использует очень старую ОС (CentOS7.9). Я только что установил PHP8.2.26, используя модуль PHP Version Switcher в CWP. CentOS yum обновляет OpenSSL только до версии 1.0.2k, что и было у меня установлено. Я установил OpenSSL 1.1.1 вручную, используя эти инструкции. Я пересобрал PHP v8.2.26, думая, что она будет использовать обновленный OpenSSL, но она все еще использует v1.0.2k. Моя конфигурация по умолчанию для PHP Openssl установлена на /etc/pki/tls/openssl.cnf. Команду, которую я использовал для настройки/установки OpenSSL v1.1.1k, была ./config --prefix=/usr --openssldir=/etc/pki/tls zlib-dynamic.

Вот некоторые выводы из моей системы:

which openssl # /usr/bin/openssl
openssl version # OpenSSL 1.1.1n  15 Mar 2022
openssl version -d # OPENSSLDIR: "/usr/local/src/openssl

Однако я вижу, что есть расположение /etc/pki/tls/bin, и выводы из этого каталога следующие:

./openssl version # OpenSSL 1.0.2 22 Jan 2015
./openssl version -d # OPENSSLDIR: "/etc/pki/tls"

Так что похоже, что это причина, по которой используется старая версия. Как я могу пересобрать PHP, чтобы она использовала более новую версию OpenSSL? Могу ли я удалить /etc/pki/tls/bin/openssl и просто создать ссылку из /etc/pki/tls/bin/openssl на /usr/bin/openssl?

(Да, я знаю, что моя ОС значительно устарела, но обновление всей ОС — это большое предприятие, и пока я просто хочу установить PHP8, используя OpenSSL версии >1.1.0, чтобы я мог использовать TLS1.3)

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

Решение задачи по реконструкции PHP с использованием обновленного OpenSSL на сервере под управлением CentOS 7.9 требует внимательного подхода и понимания взаимодействия между установленными пакетами. Ваша основная цель — заставить PHP использовать версию OpenSSL 1.1.1 вместо устаревшей версии 1.0.2k, которая поставляется с CentOS. Давайте посмотрите, как это можно сделать.

Теория

  1. Версии OpenSSL и компиляция PHP: Когда вы компилируете PHP, это делается с привязкой к библиотекам OpenSSL, которые доступны в системе на момент компиляции. Это означает, что даже если вы установили новую версию OpenSSL, PHP продолжит использовать старую, если не была сделана привязка к новой версии.

  2. Порядок поиска библиотек: Команда ‘which openssl’ и вывод версии ‘openssl version’ показывают, что в системе присутствует несколько версий OpenSSL. Это может привести к тому, что они конкурируют между собой. Когда вы запускаете ‘openssl’ из терминала, это использует путь ‘/usr/bin/openssl’, который связан с новой версией OpenSSL 1.1.1n. Однако, при компиляции PHP может использоваться старая версия в ‘/etc/pki/tls/bin’.

  3. Параметры компиляции: Когда вы компилируете PHP, важно указать правильный путь к OpenSSL в параметрах конфигурации. Используя флаг ‘–with-openssl’, вы можете указать специально установленную версию OpenSSL.

Пример

Для иллюстрации процесса предположим, что у вас есть теневой сервер с аналогичной конфигурацией. На нем PHP скомпилирован с использованием старой версии OpenSSL, но доступна новая версия, установленная в ‘/usr/local/openssl’.

Применение

  1. Удалите либо переместите старую версию OpenSSL: Это может быть рискованным шагом, если другие программы зависят от старой версии, но для компиляции PHP это может быть полезно. Альтернативой будет создание линки на новую версию. Однако, создания символических ссылок может привести к проблемам совместимости, так как некоторые программы могут полагаться на конкретные пути и версии библиотек.

  2. Обновление системных переменных: Убедитесь, что переменные среды, такие как ‘PATH’ и ‘LD_LIBRARY_PATH’ указывают на директорию с новой версией OpenSSL. Это может гарантировать, что при вызове OpenSSL в консольной среде и при компиляции программ будет использоваться именно она.

  3. Перекомпилируйте PHP с новой библиотекой OpenSSL:

    • Скачайте исходный код PHP или создайте резервную копию конфигурационного файла.
    • Исполните следующую серию команд конфигурации и компиляции:
    ./configure --prefix=/usr/local/php --with-openssl=/usr --with-config-file-path=/etc/pki/tls --enable-mbstring --with-curl
    make
    make install

    Важно заменить параметр ‘–with-openssl’ на путь до директории новой версии OpenSSL.

  4. Проверьте корректность установки: После компиляции и установки новой версии PHP, убедитесь, что используется нужная версия OpenSSL. Для этого выполните команду:

    php -i | grep OpenSSL

    Среди выводимых параметров должна отображаться версия OpenSSL, равная 1.1.1n.

  5. Обновление конфигурационных файлов: Необходимо удостовериться, что все конфигурационные файлы PHP (php.ini) в системе настроены правильно с указанием на настоящие версии библиотек и используют пути, соответствующие новой установке.

  6. Тестирование: После обновления и компиляции критично удостовериться в корректности работы приложений на PHP. Используйте тестовые скрипты, чтобы проверить функционал работы с TLS1.3 и убедитесь, что приложения не возвращают ошибки.

Заключение

Несмотря на наличие сложностей, тщательно спланированный и выполненный процесс модернизации версии OpenSSL в связке с PHP может существенно улучшить безопасность и производительность вашего сервера. При обновлении критически важно учитывать все зависимости, логические связи и потенциальные конфликты конфигураций. Навыки и умения в управлении системами Linux, таких как умение гибко работать с командной строкой, понимание процесса компиляции и управления путями, очень помогут в этом процессе.

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

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