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

Обновлено Обновлено:  Опубликовано Опубликовано: 

Используемые термины: LinuxCentOSUbuntu.

Данная инструкция протестирована на CentOS 6, 7, 8 и Ubuntu.

Узнать установленную версию OpenSSL
Обновление из репозитория
Обновление из исходников
Решение возможных проблем

Посмотреть текущую версию

Узнать текущую версию openssl в Linux можно следующей командой:

openssl version

Мы увидим что-то на подобие:

OpenSSL 1.0.2k-fips  26 Jan 2017

* в данном примере используется версия openssl 1.0.2k от 26 января 2017 года.

Если команда вернула ошибку:

openssl: command not found

... значит пакет openssl не установлен в системе.

Обновить/установить openssl можно из репозитория операционной системы или собрав его из исходника. Мы рассмотрим оба варианта.

Из пакетов

Самый простой способ — воспользоваться репозиторием. Однако, в нем может находиться далеко не последняя версия.

В зависимости от типа Linux, наши команды будут немного отличаться.

а) Для DEB-систем (Debian, Ubuntu, Astra Linux):

apt update

apt install openssl

б) Для RPM-систем (Rocky Linux, CentOS):

yum makecache

yum install openssl

* также можно ввести yum update openssl.

Если будет найдено обновление, система предложит обновить пакет — отвечаем Y.

Если обновлений нет или будет установлена не последняя версия, выполняем установку из исходника.

Из исходника

Устанавливаем пакеты, необходимые для сборки пакета. Команда зависит от дистрибутива Linux.

а) Для DEB-систем:

apt install make gcc wget tar perl

б) Для RPM-систем:

yum install make gcc wget tar perl

Переходим по ссылке https://www.openssl.org/source/ и находим в описании LTS версию openssl:

LTS версия OpenSSL

* как видим, на момент написания обновления инструкции это была версия 1.1.1.

И копируем ссылку на ее скачивание:

Ссылка за загрузки LTS OpenSSL

На CentOS скачиваем исходник с использованием найденной ссылки:

wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz

И распаковываем его с последующим удалением:

tar -xvf openssl-*.tar.gz && rm -f openssl-*.tar.gz

Переходим в папку с распакованным исходником:

cd openssl-*

Конфигурируем его:

./config --prefix=/usr --openssldir=/usr

Собираем:

make

И устанавливаем:

make install

Проверяем версию:

openssl version -a

Система вернет полные сведения об openssl, например:

OpenSSL 1.1.1t  7 Feb 2023
built on: Mon Feb 27 11:17:07 2023 UTC
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr) 
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DNDEBUG
OPENSSLDIR: "/usr"
ENGINESDIR: "/usr/lib/engines-1.1"
Seeding source: os-specific

Обновление выполнено. 

Возможные ошибки

libssl.so.1.1: cannot open shared object file

При запуске команды openssl, система возвращает ошибку:

openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

Причина: openssl не может найти нужную ей библиотеку (libssl.so), так как она распологается в нестандартном для операционной системы месте.

Решение: необходимо добавить в ldconfig правильный путь до libssl.so. Сначала найдем библиотеку, которой не хватает openssl:

find / -name libssl.so.1.1

В моем случае ответ был:

/usr/lib64/libssl.so.1.1

Значит, путь до библиотеки /usr/lib64 — его и добавляем в ldconfig. Для это создаем файл:

vi /etc/ld.so.conf.d/openssl.conf

/usr/lib64

Применяем настройки:

ldconfig

Снова проверяем:

openssl version


создаем файл:
nano /etc/ld.so.conf.d/openssl.conf
В файле:
/usr/lib64