OpenSSL

OpenSSL

Я понимаю, что Ubuntu 22.04 обновился до OpenSSL 3.0. Это сломало скрипт присоединения к защищенной точке доступа WiFi моего университета, потому что "некоторые небезопасные алгоритмы были отключены по умолчанию". Я не хочу откатываться до версии 1.1.1, а вместо этого установить 1.1.1 вместе с 3.0, в идеале под псевдонимом типа openssl1(так же, как я могу сделать с помощью , например, python2и python3), а затем взломать скрипт для использования openssl1.

Какой наиболее поддерживаемый способ это сделать?

решение1

В моем случае я столкнулся с похожей проблемой из-за перехода с openssl 3.x на 1.1.x., а именно с такими ошибками:

VERIFY ERROR: depth=0, error=CA signature digest algorithm too weak

Однако я все еще хотел использовать графический сетевой менеджер, предоставляемый gnome, поэтому сделал так, как описал трюк Густаво, а затем создал новую версию OpenVPN с версией OpenSSL 1.1.1:

# Move to temp folder
cd /tmp

# get dependencies
sudo apt install libssl-dev liblzo2-dev libpam0g-dev

OpenSSL

Причина обновления версии: Я попробовал сделать это с другой установкой Ubuntu 22.04, но не смог собрать библиотеку, openssl 1.1.1lкак в предыдущей версии (см. ниже)Старая версияраздел). На этот раз он не прошел во время make testс ошибкой на тесте 80-test_ssl_new, со следующим выводом: ../test/recipes/80-test_ssl_new.t .................. Dubious, test returned 1 (wstat 256, 0x100). После расследования выяснилось, что из-за обновления perlпакета в Ubuntu 22.04 до 5.34 @INCмодуль perl отсутствует из-за проблемы безопасности.

В любом случае, вместо того, чтобы пытаться решить эту новую проблему, я просто загрузил двоичный файл Impish, вместо того чтобы пытаться собрать его с нуля:

# download binary openssl packages from Impish builds
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/openssl_1.1.1f-1ubuntu2.16_amd64.deb
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl-dev_1.1.1f-1ubuntu2.16_amd64.deb
wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb

# install downloaded binary packages
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
sudo dpkg -i libssl-dev_1.1.1f-1ubuntu2.16_amd64.deb
sudo dpkg -i openssl_1.1.1f-1ubuntu2.16_amd64.deb

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

OpenVPN

Теперь, когда OpenSSL имеет версию 1.1.1l, как и в случае с Impish 21.10, я могу собрать двоичный файл OpenVPN, используя библиотеки 1.1.1l.

# Get OpenVPN sources from Ubuntu 22.04 Jammy
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/openvpn/2.5.5-1ubuntu3/openvpn_2.5.5.orig.tar.xz

# Extract files
tar -xvf openvpn_2.5.5.orig.tar.xz

# build openvpn 2.5.5
cd ..
cd openvpn-2.5.5/
./configure
make -j 4 && sudo make install

# refresh cache
hash -r

# check version
/usr/local/sbin/openvpn --version
ldd /usr/bin/openssl
ldd /usr/local/sbin/openvpn

На этом этапе мне удалось подключиться к VPN, используя существующие сертификаты, однако графический сетевой менеджер по-прежнему использовал версию OpenVPN по умолчанию 2.5.5 на основе OpenSSL 3.x.

Гном

Я обнаружил, что сетевой менеджер всегда ориентировался на двоичный файл в /usr/sbin, поэтому я сделал резервную копию, а затем создал символическую ссылку на собранный OpenVPN:

# make a backup of default OpenVPN 2.5.5 before replace
sudo mv /usr/sbin/openvpn /usr/sbin/openvpn-2.5.5_default

# Symlink new OpenVPN client built with OpenSSL 1.1.1l library
sudo ln -s /usr/local/sbin/openvpn /usr/sbin/openvpn

Очистить

Если вы использовали бинарный файл OpenSSL от Impish, вам следует сделать , sudo apt update && sudo apt upgradeчтобы восстановить последнюю версию этого пакета. Это не должно нарушить ваш брендстарыйВерсия OpenVPN

Старая версия этой статьи

OpenSSL

этостарая версиячасти OpenSsl выше:

# Get OpenSSL sources from Ubuntu 21.10 Impish
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/openssl/1.1.1l-1ubuntu1.6/openssl_1.1.1l.orig.tar.gz

# Extract files
tar -xvf openssl_1.1.1l.orig.tar.gz

# build openssl 1.1.1l
cd /tmp/openssl-1.1.1l/
./config shared enable-ec_nistp_64_gcc_128 -Wl,-rpath=/usr/local/ssl/lib --prefix=/usr/local/ssl
make -j 4
make test && sudo make install

# refresh cache
hash -r

# check version
/usr/local/ssl/bin/openssl <<< version

# symlink binary for path resolution
sudo ln -s /usr/local/ssl/bin/openssl /usr/local/bin/openssl

OpenVPN

Этостарая версиячасти OpenVPN выше. Теперь, когда OpenSSL версии 1.1.1l, как и в случае с 21.10 Impish, я могу собрать двоичный файл OpenVPN, используя библиотеки 1.1.1l

# Get OpenVPN sources from Ubuntu 22.04 Jammy
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/openvpn/2.5.5-1ubuntu3/openvpn_2.5.5.orig.tar.xz

# Extract files
tar -xvf openvpn_2.5.5.orig.tar.xz

# build openvpn 2.5.5
cd ..
cd openvpn-2.5.5/
CFLAGS="-I/usr/local/ssl/include -Wl,-rpath=/usr/local/ssl/lib -L/usr/local/ssl/lib"
./configure
make -j 4 && sudo make install

# refresh cache
hash -r

# check version
/usr/local/sbin/openvpn --version
ldd /usr/local/bin/openssl
ldd /usr/local/sbin/openvpn

решение2

Сборка из исходников работает, особенно если вы можете указать для всего, что требует openssl 1.1.1, определенный каталог с библиотеками:

cd /usr/local/src/
sudo git clone https://github.com/openssl/openssl.git -b OpenSSL_1_1_1-stable openssl-1.1.1m
cd openssl-1.1.1m
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
sudo make
sudo make test
sudo make install_sw

Каталог, содержащий библиотеки, теперь/usr/local/ssl

решение3

включить устаревших поставщиков в последней версии:

https://gist.github.com/rdh27785/97210d439a280063bd768006450c435d

/etc/ssl/openssl.cnf

добавить или изменить

 # List of providers to load
 [provider_sect]
 default = default_sect
 legacy = legacy_sect 
 [default_sect]
 activate = 1
 [legacy_sect]
 activate = 1

затем перезапустите соответствующие службы (или выполните перезагрузку)

Связанный контент