Найти в Дзене

Как обновить OpenSSL на Linux?

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 минут.

-2

По окончании тестов, если все прошло ок, запускаем финальную команду:

sudo make install

Если система напишет, что такой файл существует, то надо старый файл переименовать:

mv /usr/***/*** /usr/***/***_old

где usr/***/*** — путь, который мы запоминали выше.

И опять запустить:

sudo make install

Если все прошло хорошо, то проверяем версию openssl.

Не забываем удалить старый файл:

rm /usr/***/***_old

Потом выходим в наше приложение и проверяем, что все работает как надо с новой библиотекой.

p.s. Обновления этой библиотеки через apt проходят криво или вообще не проходят, поэтому ей обновиться не получится после 2022 года. Лучше делать вручную, как написано выше.