OpenSSL — одна из важнейших и используемых библиотек на серверах. Поддерживает почти все низкоуровневые алгоритмы хеширования, шифрования и электронной подписи, а также реализует большинство популярных криптографических стандартов, в том числе позволяет создавать ключи RSA, DH, DSA, сертификаты X.509, подписывать их, формировать CSR (Certificate Signing Request) и CRT (файл сертификата безопасности), шифровать данные и тестировать SSL/TLS соединения.
Но очень часто к ней относят бездумно и не следят за ее обновлениями. А зря. В ней постоянно находят уязвимости (включая критические) и постоянно обновляют. Например, критическая уязвимость CVE-2022-4304 позволяет получить расшифрованный текст при прослушивании защищенного TLS канала! На данный момент последний релиз 3.3.1, но есть еще и релизы 3.2, 3.1 и 3.0. Их тоже поддерживают и обновляют. Релизы 1.0 и 1.1 уже не обновляют и не поддерживают! Поэтому прежде всего надо проверить, какая версия стоит на сервере:
openssl version
Если ответом будет любая версия, кроме последних релизных https://openssl-library.org/source/index.html, то нужно обновлять. Либо свой релиз 3.0-3.2, либо до последнего 3.3.х.
Перед стартом лучше всего сделать образ диска или бэкап, так как случиться может, что угодно.
Потом нужно выяснить, где лежит текущая библиотека:
which openssl
Ответом будет путь, например:
/usr/bin/ssl
Его надо запомнить, он понадобится чуть позже.
Проверяем, что на сервере есть компилятор gcc:
gcc
Если его нет, запускаем инсталляцию компилятора и всего, что нужно для сборки:
sudo apt update & apt install build-essential
После этого заходим в релизы и копируем ссылку на нужный нам релиз, например:
https://github.com/openssl/openssl/releases/download/openssl-3.3.1/openssl-3.3.1.tar.gz
Переходим в директорию для исходников:
cd /usr/src/
Скачиваем релиз:
wget https://github.com/openssl/openssl/releases/download/openssl-3.3.1/openssl-3.3.1.tar.gz
Разархивируем:
tar xvzf openssl-3.3.1.tar.gz
Переходим в папку:
cd openssl-3.3.1
Дальше запускаем конфигурацию приложения для данной системы (согласно документации):
./Configure --prefix=/usr/***/*** --openssldir=/usr/***/*** \
'-Wl,--enable-new-dtags,-rpath,$(LIBRPATH)'
Где /usr/***/*** — это ваш путь, который вы запомнили выше. Если этот пункт не сделать, то после инсталляции будут конфликты нескольких версий openssl.
Отдыхаем 5-10 минут, пока происходит сборка.
По окончании сборки, если не выдало никаких ошибок, нужно обязательно провести тестирование:
make test
И опять уйти пить кофе на 10 минут.
По окончании тестов, если все прошло ок, запускаем финальную команду:
sudo make install
Если система напишет, что такой файл существует, то надо старый файл переименовать:
mv /usr/***/*** /usr/***/***_old
где usr/***/*** — путь, который мы запоминали выше.
И опять запустить:
sudo make install
Если все прошло хорошо, то проверяем версию openssl.
Не забываем удалить старый файл:
rm /usr/***/***_old
Потом выходим в наше приложение и проверяем, что все работает как надо с новой библиотекой.
p.s. Обновления этой библиотеки через apt проходят криво или вообще не проходят, поэтому ей обновиться не получится после 2022 года. Лучше делать вручную, как написано выше.