В августе 2018 года IETF представил TLS 1.3 (RFC 8446), что сделало HTTPS более быстрым и безопасным. Эта версия протокола является последней на сегодняшний день. В данном руководстве мы объясним, как активировать TLS 1.3 на веб-сервере Nginx для Ubuntu 18.04 и Ubuntu 16.04.
Обновление: Теперь доступен более удобный метод активации TLS 1.3. Ознакомьтесь с данной статьей: Как быстро активировать TLS 1.3 в Nginx на Ubuntu 18.10, 18.04, 16.04, 14.04.
Содержание статьи
- 1 TLS 1.3: Повышение безопасности и эффективности.
- 2 Настройка TLS 1.3 в Nginx на Ubuntu 18.04 и 16.04.
- 3 Интеграция официального репозитория Nginx.
- 4 Скачивание исходников Nginx и OpenSSL
- 5 Настройте параметры компиляции Nginx.
- 6 Сборка Nginx
- 7 Включение протокола TLS 1.3 в настройках сервера Nginx.
- 8 Активирование TLS 1.3 в браузере Google Chrome
- 9 Активируйте TLS 1.3 с помощью CloudFlare.
TLS 1.3: Повышение безопасности и эффективности.
С точки зрения эффективности, для установления HTTPS-соединения TLS 1.2 нуждается в двух круговых обменах, в то время как TLS 1.3 требует лишь одного. Кроме того, TLS 1.3 предлагает режим нулевого кругового обмена (0-RTT), который позволяет клиентам, уже подключавшимся к вашему сайту, отправлять HTTP-запрос в первом сообщении к серверу. Это значительно улучшает опыт пользователей в мобильных сетях и тех, кто находится в отдалённых районах.
С точки зрения безопасности, TLS 1.3 исключил поддержку устаревших шифров, которые способствовали уязвимостям, таким как атака ROBOT. Это означает, что администраторы серверов не могут интегрировать старые шифры в TLS 1.3, чтобы удовлетворить пользователей устаревших веб-браузеров. Хотя это описание является упрощенным, у CloudFlare есть отличное и подробное объяснение TLS 1.3.
Настройка TLS 1.3 в Nginx на Ubuntu 18.04 и 16.04.
Для активации TLS 1.3 в Nginx необходимо соблюдение двух условий.
- Для поддержки TLS 1.3 ваша версия Nginx должна быть не ниже 1.13.
- Nginx необходимо компилировать с OpenSSL версии 1.1.1 или выше, либо использовать в связке с OpenSSL 1.1.1 и новее.
Второе условие может показаться сложным для понимания, поэтому я приведу два примера.
- Ubuntu 18.04 включает в себя OpenSSL версии 1.1.0. Замена системной библиотеки OpenSSL не рекомендуется, однако вы можете загрузить исходный код OpenSSL 1.1.1 и скомпилировать Nginx с этой версией, чтобы добавить поддержку TLS 1.3.
- В настоящее время Arch Linux включает OpenSSL версии 1.1.1, однако пакет Nginx в репозитории Arch собран на основе OpenSSL 1.1.0. Таким образом, Nginx не использует OpenSSL 1.1.1 при сборке, но вполне совместим с этой версией.
Теперь рассмотрим процесс компиляции Nginx с OpenSSL 1.1.1 на системах Ubuntu 18.04 и 16.04.
Интеграция официального репозитория Nginx.
Я планирую добавить официальный репозиторий Nginx на свой сервер Ubuntu вместо загрузки исходного архива и компиляции его с помощью make. Затем я создам deb-пакет из исходного кода, что избавит меня от необходимости вручную вводить длинный список параметров конфигурации для команды configure. Кроме того, в deb-пакете будет удобный файл службы systemd.
Сначала получите GPG-ключ для Nginx и импортируйте его в систему Ubuntu.
wget http://nginx. org/keys/nginx_signing. key sudo apt-key add nginx_signing. key
После этого сформируйте файл со списком источников для репозитория Nginx.
sudo nano /etc/apt/sources. list. d/nginx. list
В файл нужно добавить две строки. Строка deb-src даст возможность загружать исходные пакеты Nginx через команду apt source. Bionic является кодовым именем для версии Ubuntu 18.04. Если у вас установлена Ubuntu 16.04, замените его на xenial. Обратите внимание, что этот репозиторий не поддерживает 32-битные операционные системы.
deb [arch=amd64] http://nginx. org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx. org/packages/mainline/ubuntu/ bionic nginx
Для сохранения файла в текстовом редакторе Nano используйте комбинацию клавиш Ctrl+O, после чего нажмите Enter для подтверждения. Чтобы закрыть редактор, нажмите Ctrl+X. Далее обновите локальный индекс пакетов.
sudo apt update
Официальный репозиторий Nginx теперь интегрирован на сервере Ubuntu.
Скачивание исходников Nginx и OpenSSL
Создадим папку nginx в /usr/local/src/ для хранения исходных файлов Nginx и затем переместимся в эту папку.
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
Скачайте исходный пакет Nginx, используя следующую команду:
Пожалуйста, просмотрите загруженные документы.
nginx-1.15.3 nginx_1.15.3-1~bionic. dsc для nginx версии 1.15.3-1~bionic. debian. tar. xz nginx_1.15.3.orig. tar.gz
После этого скопируйте репозиторий OpenSSL с GitHub.
cd /usr/local/src sudo apt install git sudo git clone https://github.com/openssl/openssl. git cd openssl
Перечислите все доступные ветки и переключитесь на стабильную версию 1.1.1.
git branch - a sudo git checkout OpenSSL_1_1_1-stable
Настройте параметры компиляции Nginx.
Измените файл с правилами компиляции для Nginx.
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules
Перейдите в раздел config.status. nginx: config.env. nginx. В конце строки CFLAGS добавьте указанный текст, помня, что он не должен быть на новой строке.
--with-openssl=/usr/local/src/openssl

Сохраните изменения и завершите работу с файлом.
Сборка Nginx
Проверьте, что вы находитесь в папке с исходниками Nginx.
cd /usr/local/src/nginx/nginx-1.15.3/
Скачайте необходимые библиотеки для компиляции нашего deb-пакета Nginx.
sudo apt build-dep nginx
Теперь применяйте следующую команду для создания deb-пакета.
sudo dpkg-buildpackage - b
Если вам встретится следующая ошибка,
Не предусмотрен инициализатор для свойства ‘md_ctrl’ в ‘EVP_MD’.
После этого внесите изменения в файл auto/cc/gcc.
sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc
Закомментируйте следующую строку. Параметр — Werror заставляет компилятор GCC воспринимать предупреждения как ошибки.
CFLAGS="$CFLAGS - Werror"
После этого повторно выполните команду сборки. Когда процесс завершится, в папке /usr/local/src/nginx/ появится deb-пакет Nginx. Если у вас уже была установлена предыдущая версия, следует её удалить и установить обновлённую.
sudo apt remove nginx nginx-common nginx-full cd /usr/local/src/nginx/ sudo dpkg - i nginx_1.15.3-1~bionic_amd64.deb
Давайте теперь приступим к запуску Nginx.
sudo systemctl start nginx
Если вам встретится такое сообщение об ошибке.
Не удалось запустить nginx.service: Единица nginx.service заблокирована.
После этого разблокируйте nginx и повторно запустите команду.
sudo systemctl unmask nginx
Процесс Nginx может выполняться от имени пользователя nginx или www-data. Это можно настроить, изменив первую строку в конфигурационном файле /etc/nginx/nginx.conf.Важно убедиться, что Nginx работает под тем же пользователем, что и PHP-FPM.
Теперь убедитесь в правильности параметров конфигурации Nginx.
sudo nginx - V
Как можно заметить, у нас установлена последняя версия Nginx, собранная с использованием OpenSSL 1.1.1.
Включение протокола TLS 1.3 в настройках сервера Nginx.
Предположим, что вы уже активировали HTTPS для вашего Nginx-сервера. Для включения TLS 1.3 синтаксис достаточно простой. Откройте конфигурационный файл сервера Nginx, который находится в директории /etc/nginx/conf.d/ или /etc/nginx/sites-enabled/, и найдите нужную строку.
ssl_protocols TLSv1.2;
Включите протокол TLSv1.3 в перечень поддерживаемых.
ssl_protocols TLSv1.2 TLSv1.3;
Далее добавьте три новых набора шифров к уже имеющимся.
TLS-CHACHA20-POLY1305-SHA256 TLS-AES-256-GCM-SHA384 TLS-AES-128-GCM-SHA256
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Сохраните файл и закройте его. После этого проверьте настройки Nginx и выполните перезагрузку.
sudo nginx - t sudo systemctl reload nginx
Скорее всего, Ubuntu 18.04 не перейдет на OpenSSL 1.1.1, и в результате, если вы выполните обновление Nginx с помощью команды sudo apt upgrade, поддержка TLS 1.3 будет удалена. Рекомендуется заблокировать обновление Nginx через apt, используя следующую команду:
sudo apt-mark hold nginx
С обновлением Nginx 1.15.4 появилась возможность активировать 0-RTT с OpenSSL, для этого необходимо добавить соответствующую директиву в ssl-контекст сервера. По умолчанию данная опция выключена. В версии 1.15.3 это было доступно исключительно с BoringSSL.
ssl_early_data on
Активирование TLS 1.3 в браузере Google Chrome
На данный момент браузеры Firefox 62 и Chrome 69 поддерживают лишь проектную версию 28 TLS 1.3. Окончательная версия TLS 1.3 доступна в OpenSSL 1.1.1. Реализации, основанные на проектной версии, не совместимы с финальной версией RFC.
Для проверки нашего сервера Nginx необходимо установить бета-версию Google Chrome и активировать финальную версию TLS 1.3. После установки бета-версии откройте адрес chrome://flags/#tls13-variant в строке браузера и измените параметр с «по умолчанию» на «Включено (Финальная)». После этого перезапустите Google Chrome, чтобы изменения начали действовать.

Теперь зайдите на ваш сайт, поддерживающий TLS 1.3 в бета-версии Google Chrome, и нажмите Ctrl+Shift+I для открытия панели инструментов разработчика. Перейдите на вкладку «Безопасность», чтобы узнать, какая версия TLS используется.

Существует информация, что окончательная версия TLS 1.3 будет внедрена в Firefox 63, который ожидается в октябре 2018 года. В свою очередь, Chrome 70 также планирует добавить эту версию для исходящих соединений.
Обновление: В Chrome 70 появилась поддержка окончательной версии TLS 1.3, однако по умолчанию все еще применяется черновик 28 TLS 1.3.
Активируйте TLS 1.3 с помощью CloudFlare.
Если вы пользуетесь CDN от CloudFlare, значит, ваш сайт уже работает с TLS 1.3. Для проверки этого откройте панель управления CloudFlare и перейдите в раздел криптографии, где вы найдете возможность активации или деактивации TLS 1.3. Кроме того, вы можете активировать 0-RTT. CloudFlare поддерживает как черновую версию 28, так и окончательную.
На этом всё! Надеюсь, что данный урок оказался полезным для активации TLS 1.3 в Nginx на Ubuntu 18.04 и 16.04. Заботьтесь о себе.

