На днях мне понадобилось обновить версию OpenSSL в Ubuntu Server 16.04, для поддержки шифра CHACHA20-POLY1305, я хотел использовать этот шифр в HTTPS шифровании трафика. По умолчанию Ubuntu Server поставляется вместе с OpenSSL версии 1.0.2, не поддерживающей нужного мне шифра, а в системных репозиториях Ubuntu свежая версия отсутствует. Поэтому чтобы получить последнюю версию OpenSSL, ее приходится собирать из исходников.
Существует еще один способ достижения нужного результата, это пересборка Nginx вместе с версией OpenSSL 1.1.0, отдельно подключаемой при конфигурации. Но поскольку все делалось с нуля, на чистой системе, то я решил просто обновить версию OpenSSL, а потом поставить сверху нее все что нужно.
Нужно установить пакет build-essential, чтобы скомпилировать OpenSSL из исходников. Заодно я ставлю libssl-dev, для поддержки HTTPS, пригодится в дальнейшем при сборке Nginx.
apt-get install build-essential libssl-dev -y
Перейдем в рабочий каталог /usr/local/src.
cd /usr/local/src
Скачиваем архив с последней версией OpenSSL.
wget https://www.openssl.org/source/latest.tar.gz -O openssl-1.1.0.tar.gz
Распакуем архив.
tar -zxvf openssl-1.1.0.tar.gz
Переходим в каталог с распакованным архивом.
cd openssl-1.1.0f
Задаем конфигурацию.
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl -Wl,-rpath,/usr/local/ssl/lib
Компилируем и проверяем.
make && make test
Устанавливаем.
make install
Заменяем старый openssl файл из каталога /bin на новый. Старый файл убираем, потом делаем ссылку на новый.
mv /usr/bin/openssl /root/ ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
Проверяем установленную версию.
openssl version OpenSSL 1.1.0f 25 May 2017
А вот то, ради чего все затевалось. Поддержка нужных шифров CHACHA20.
openssl ciphers -v 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305' ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD
Спасибо за внимание.