В предыдущем материале я рассматривал процесс компиляции исходного кода Nginx с OpenSSL 1.1.1 для активации поддержки TLS 1.3, который был выпущен в августе 2018 года. В этом руководстве я представлю более простой способ включения TLS 1.3 на Ubuntu версий 20.04, 18.04 и 16.04.
Содержание статьи
- 1 TLS 1.3 предлагает повышенную скорость работы и усиленные меры безопасности.
- 2 Требования для активации TLS 1.3.
- 3 Ubuntu версий 18.04 и 20.04 включают OpenSSL 1.1.1.
- 4 Установите актуальную версию Nginx с OpenSSL 1.1.1 на операционную систему Ubuntu 16.04.
- 5 Активируйте TLS 1.3 в виртуальном хосте Nginx на системах Ubuntu 20.04, 18.04 и 16.04.
- 6 Проверка версии TLS в интернет-браузере.
- 7 Применяется ли TLSv1.3 для соединения между вашим исходным сервером и Cloudflare?
TLS 1.3 предлагает повышенную скорость работы и усиленные меры безопасности.
С точки зрения эффективности, для установления HTTPS-соединения с использованием TLS 1.2 необходимо провести два обмена. В случае с TLS 1.3 достаточно одного обмена. Более того, TLS 1.3 поддерживает режим нулевого обмена (0-RTT для возобновления сессии), позволяя клиентам, которые уже подключались к вашему сайту, отправлять HTTP-запросы сразу при первом обращении к серверу. Это особенно важно для пользователей мобильных сетей или находящихся в удаленных регионах.
С позиции безопасности, TLS 1.3 исключил устаревшие шифры, что устраняет такие уязвимости, как атака ROBOT. Это лишь общее описание. CloudFlare предлагает более подробное разъяснение TLS 1.3.
Требования для активации TLS 1.3.
Для активации TLS 1.3 в Nginx необходимо выполнить два условия.
- Для поддержки TLS 1.3 ваша версия Nginx должна быть не ниже 1.13.
- Для работы Nginx требуется сборка с OpenSSL версии 1.1.1 или выше.
Ubuntu версий 18.04 и 20.04 включают OpenSSL 1.1.1.
OpenSSL версии 1.1.1 присутствует в репозиториях Ubuntu 18.10 и 20.04, а пакет Nginx из этих репозиториев собран с использованием OpenSSL 1.1.1.
Когда Ubuntu 18.04 была выпущена, в ней изначально использовалась только версия OpenSSL 1.0.2. Тем не менее, OpenSSL 1.1.1 был добавлен в Ubuntu 18.04.3.

Если вы продолжаете работать на Ubuntu 18.04.2, выполните следующие команды для обновления до версии 18.04.3.
sudo apt update sudo apt upgrade
Установите актуальную версию Nginx с OpenSSL 1.1.1 на операционную систему Ubuntu 16.04.
Пакет Nginx, доступный в репозитории Ubuntu 16.04, не поддерживает OpenSSL 1.1.1. Вы можете самостоятельно собрать Nginx с этой версией OpenSSL, но этот процесс займет дополнительное время, и вам придется повторно компилировать его при выходе новых версий. К счастью, есть возможность установить Nginx из PPA (личного архивного пакета), созданного Ondřej Surý, разработчиком Debian и значимой фигурой в сообществе DNS. Он поддерживает множество пакетов для репозитория Debian, включая Apache, BIND, MariaDB, PHP и другие. Также он является одним из кураторов официального PPA certbot. Поэтому я доверяю его PPA и использую его на своих серверах.
Если вы ранее подключали другой репозиторий Nginx (например, nginx. org), его следует отключить. К примеру, у меня имеется другой репозиторий Nginx, указанный в файле /etc/apt/sources. list. d/nginx-repo. list. Я просто закомментировал все строки в этом файле, чтобы его отключить.
Для добавления PPA Ondřej Surý для Nginx на Ubuntu, введите следующую команду.
sudo add-apt-repository ppa:ondrej/nginx sudo apt update
После этого необходимо удалить текущий пакет Nginx. (При этом ваши конфигурационные файлы Nginx останутся нетронутыми.)
sudo apt remove nginx
Если вы работаете с iRedMail и Nginx, введите команду sudo apt remove nginx-full для удаления Nginx.
Установите Nginx с помощью PPA.
sudo apt install nginx
Если вам зададут вопрос о желании установить обновленную версию конфигурационного файла, выберите N. Учтите, что ваш плагин certbot для Nginx может быть удален вместе с Nginx, поэтому не забудьте установить его снова.
sudo apt install python3-certbot-nginx
Теперь убедитесь, что у вас установлена актуальная версия Nginx.
sudo nginx - V
Необходимо убедиться, что Nginx скомпилирован с OpenSSL версии 1.1.1.
nginx version: nginx/1.14.1 создано с использованием OpenSSL 1.1.1 11 Sep 2018 (running with OpenSSL 1.1.0g 2 Nov 2017) Поддержка TLS SNI включена
Данный PPA предлагает OpenSSL 1.1.1 для Ubuntu 16.04. Если ваш Nginx на этой версии Ubuntu по-прежнему использует OpenSSL 1.1.0, необходимо выполнить обновление пакета OpenSSL.
sudo apt upgrade
Имейте в виду, что при использовании Google Compute Engine при выполнении указанной команды вы столкнетесь с следующим сообщением.
Следующие пакеты были удержаны: libssl1.1 openssl
Это обусловлено конфликтом между пакетом OpenSSL 1.1.1 и некоторыми компонентами Google Compute Engine. Для обновления OpenSSL вам следует выполнить следующую команду.
sudo apt dist-upgrade
Активируйте TLS 1.3 в виртуальном хосте Nginx на системах Ubuntu 20.04, 18.04 и 16.04.
После установки Nginx с OpenSSL 1.1.1, приступите к редактированию файла виртуального хоста Nginx.
sudo nano /etc/nginx/conf.d/site.conf
sudo nano /etc/nginx/sites-enabled/site.conf
Для активации TLS 1.3 достаточно внести TLSv1.3 в директиву ssl_protocols в разделе конфигурации SSL-сервера.
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
При использовании сертификата Let’s Encrypt, настройки SSL можно найти в файле /etc/letsencrypt/options-ssl-nginx.conf.Обратите внимание, что certbot по умолчанию включает TLSv1, который считается небезопасным, и его рекомендуется удалить. Если вы работаете с iRedMail и Nginx, необходимо внести изменения в настройки SSL в файле /etc/nginx/templates/ssl. tmpl.
Сохраните файл и закройте его. После этого перезапустите Nginx, чтобы применить внесённые изменения.
sudo systemctl restart nginx
Проверка версии TLS в интернет-браузере.
При работе с Firefox версии 63 или более поздней, обновите вашу веб-страницу, кликните правой кнопкой мыши на пустом участке и выберите пункт «Просмотреть информацию о странице» из выпадающего меню. Затем перейдите на вкладку «Безопасность», где вы сможете увидеть, что активирован TLS 1.3.

Для того чтобы проверить настройки безопасности на вашем сайте, откройте страницу в Google Chrome версии 70 или новее и обновите её. Затем нажмите Ctrl+Alt+I, чтобы открыть панель инструментов для разработчиков. Перейдите в раздел «Безопасность», где вы сможете увидеть, что используется протокол TLS 1.3.

Применяется ли TLSv1.3 для соединения между вашим исходным сервером и Cloudflare?
Да, Cloudflare реализует поддержку TLS 1.3 на своем фронтальном сервере и применяет эту версию протокола при соединении с вашим исходным сервером. Для проверки версии TLS, которую вы используете, можно настроить пользовательский формат логов в файле /etc/nginx/nginx.conf.
sudo nano /etc/nginx/nginx.conf
Включите следующий текст в контекст http.
log_format combined_ssl '$remote_addr - $remote_user [$time_local] ' '$ssl_protocol/$ssl_cipher ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
Сохраните файл и закройте его. Далее добавьте директиву access_log в контекст вашего SSL-сервера. Логи будут сохраняться в формате combined_ssl.
access_log /var/log/nginx/your-site.access.log combined_ssl;
Сохраните изменения в файле и закройте его. Далее выполните перезагрузку Nginx. В логах доступа вы можете заметить записи, указывающие на использование TLS 1.3.
172.68.132.115 - - [25/Feb/2020:16:07:26 +0800] TLSv1.3/TLS_AES_256_GCM_SHA384 "GET / HTTP/1.1"

