Как активировать TLSv1.3 на NGINX? VestaCP / CentOS или Ubuntu

В этом уроке вы узнаете, как включите TLSv1.3 на NGINX. Что это значит TLSv 1.3, что это помогает и почему тебе нужно на веб-сервере как TLS можно активировать. Для серверов с системой управления VestaCP (CentOS или Ubuntu) немного сложнее активировать TLS 1.3 чем на сервере cPanel, но это возможно.

Почему лучше TLS 1.3 чем TLS 1.2?

TLS (Transport Layer Security) является криптографический протокол что обеспечивает безопасность соединения между компьютером и сетью, частью которой он является. TLS он используется в таких приложениях, как: e-mail, обмен сообщениями, голосовые и видеозвонки (VoIP), но особенно в HTTPS. Обеспечение защищенной связи между компьютером или смартфоном пользователя и веб-сервером посещаемой страницы.

TLS 1.3 предлагает более высокая скорость подключения клиент-сервер и К тому же безопасность путем исключения некоторых алгоритмов. Различия между TLSv1.2 и TLSv1.3.

о HTTPS, SSL (Secure Sockets Layer) Я же говорил в других статьях:

Как активировать TLS 1.3 на NGINX? Сервер с управлением VestaCP / CentOS

Прежде чем вы увидите, как вы активируете TLSv1.3 на NGINX необходимо учитывать некоторые минимальные требования для TLS 1.3.

  1. NGINX 1.13.x или новее
  2. Сертификат TLS действительный
  3. Активное доменное имя с правильно настроенным DNS — быть доступным в Интернете
  4. Сертификат TLS / SSL действительный. Это также может быть Let’s Encrypt.

Pe VestaCP установлен давно, нам доступен только протокол TLS 1.2. Я видел во многих учебниках, что достаточно, как в nginx.conf добавим следующую строку для ca TLS 1.3 для активации:

server {

  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com;
  root /var/www/example.com/public;

  ssl_certificate /path/to/your/certificate.crt;
  ssl_certificate_key /path/to/your/private.key;

  ssl_protocols TLSv1.2 TLSv1.3;

Фальшивый. Если сервер CentOS с руководством VestaCP, NGINX не скомпилирован с минимальной версией OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3; в nginx.conf .. совсем не помогает.

[root@north ~]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled

Итак, в приведенном выше примере Nginx 1.22.0 является совместимой версией. TLS 1.3, но библиотека нам не помогает OpenSSL 1.0.2k-fips.

Активировать TLSv1.3 на Nginx, вам необходимо сначала установить дочерние библиотеки и пакеты разработки. Development Tools. Он работает в CentOS 7 командных строк:

yum install gcc gcc-c++ pcre-devel zlib-devel make unzip gd-devel perl-ExtUtils-Embed libxslt-devel openssl-devel perl-Test-Simple
yum groupinstall 'Development Tools'

1. Установите последнюю версию OpenSSL

На данный момент последняя версия OpenSSL 1.1.1p, но насколько я заметил уже есть и OpenSSL 3. Вы можете найти исходники на OpenSSL.org.

cd /usr/src
wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz
tar xvf openssl-1.1.1p.tar.gz 
mv openssl-1.1.1p openssl
cd openssl
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl --libdir=/lib64 shared zlib-dynamic
make -j4
make test 
make install 

Очень важно бежать make test перед установкой библиотеки. Если в тесте есть ошибки, не запускайте make install пока ошибки не будут исправлены.

На следующем шаге делаем резервную копию текущего бинарного файла openssl и мы добавляем symlink к новому.

mv /usr/bin/openssl /usr/bin/openssl-backup
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

В /usr/local/openssl/bin выполнять ldd проверить зависимости openssl. Мы также можем проверить версию openssl. Команда openssl version.

[root@north bin]# ldd openssl
	linux-vdso.so.1 =>  (0x00007ffd20bd7000)
	libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007fab09b62000)
	libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007fab09675000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fab09471000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fab09255000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fab08e87000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fab09df5000)
[root@north bin]# openssl version
OpenSSL 1.1.1p  21 Jun 2022

В настоящее время у нас установлена ​​последняя версия OpenSSL который терпит TLSv1.3. Мы можем проверить версии TLS / SSL при поддержке книжных магазинов OpenSSL по порядку:

[root@north bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[root@north bin]# 

Это не означает, что сайты, размещенные с помощью менеджера VestaCP они будут иметь немедленно TLS 1.3.

Хотя мы установили OpenSSL 1.1.1p, Nginx скомпилирован со старой версией OpenSSL 1.0.2k-fips.

[root@north bin]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
[root@north bin]# openssl version
OpenSSL 1.1.1p  21 Jun 2022
[root@north bin]# 

2. Перекомпилируйте Nginx для системы VestaCP

На этом шаге нам нужно перекомпилировать для OpenSSL версия Nginx уже установлена в системе CentOS / VestaCP. Как я уже сказал выше, в моем случае речь идет о nginx/1.22.0. Поскольку мы говорим о веб-сервере, который имеет VestaCP системы администрирования, прежде чем мы начнем перекомпилировать, хорошо сделать резервную копию файлов конфигурации nginx.

Бэкап Nginx текущего в системе VestaCP

Заархивируйте и храните где-нибудь на сервере каталоги "/etc/nginx«И»/usr/local/vesta/nginx».

БЕГАТЬ nginx -V и сохраните существующие модули в файл.

configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Как вы активируете? TLSv1.3 на NGINX
Как активировать TLSv1.3 на NGINX

Как перекомпилировать Nginx для обновления OpenSSL / CentOS 7

Я повторяю. Если у вас есть VestaCP, загрузите уже установленную версию Nginx. Вы можете найти все архивы с версиями Nginx на nginx.org.

cd /usr/src
wget https://nginx.org/download/nginx-1.22.0.tar.gz 
tar xvf nginx-1.22.0.tar.gz
cd nginx-1.22.0

Перекомпилируем модули nginx:

./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \ 
--modules-path=/usr/lib64/nginx/modules \ 
--conf-path=/etc/nginx/nginx.conf \ 
--error-log-path=/var/log/nginx/error.log  \
--http-log-path=/var/log/nginx/access.log  \
--pid-path=/var/run/nginx.pid  \
--lock-path=/var/run/nginx.lock  \
--http-client-body-temp-path=/var/cache/nginx/client_temp  \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp  \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp  \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp  \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp  \
--user=nginx  \
--group=nginx  \
--with-compat  \
--with-file-aio  \
--with-threads  \
--with-http_addition_module  \
--with-http_auth_request_module  \
--with-http_dav_module  \
--with-http_flv_module  \
--with-http_gunzip_module  \
--with-http_gzip_static_module  \
--with-http_mp4_module  \
--with-http_random_index_module  \
--with-http_realip_module  \
--with-http_secure_link_module  \
--with-http_slice_module  \
--with-http_ssl_module  \
--with-http_stub_status_module  \
--with-http_sub_module  \
--with-http_v2_module  \
--with-mail  \
--with-mail_ssl_module  \
--with-stream  \
--with-stream_realip_module  \
--with-stream_ssl_module  \
--with-stream_ssl_preread_module  \
--with-openssl=/usr/src/openssl  \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong  \
--param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC'  \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
make -j4
make install

Теперь у нас установлен и скомпилирован Nginx с последней версией OpenSSL способен выдержать TLSv1.3.

[root@north bin]# nginx -V
nginx version: nginx/1.22.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.1.1p  21 Jun 2022
TLS SNI support enabled

*если на сервере уже был установлен nginx, его необходимо удалить. Компиляция не работает при обновлении nginx.

Как активировать TLSv1.3 для доменов на VestaCP?

В файле /etc/nginx/nginx.conf мы добавляем следующие строки:

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers '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';

На уровне домена я что-то изменил в шаблонах VestaCP и включить HTTP/2. Итак, при добавлении нового домена (example.com) с включенным Let's Encrypt у меня есть следующий файл конфигурации для SSL:

cat /home/vestacpuser/conf/web/example.com.nginx.ssl.conf 

server {
    listen      IP.IP.IP.IP:443 ssl http2;
    server_name example.com www.example.com;
    root        /home/vestacpuser/web/example.com/public_html;
    index       index.php index.html index.htm;
    access_log  /var/log/nginx/domains/example.com.log combined;
    access_log  /var/log/nginx/domains/example.com.bytes bytes;
    error_log   /var/log/nginx/domains/example.com.error.log error;

    ssl_certificate      /home/vestacpuser/conf/web/ssl.example.com.pem;
    ssl_certificate_key  /home/vestacpuser/conf/web/ssl.example.com.key;

....

ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers '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 рекомендуется сначала протестировать его конфигурацию.

[root@north web]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@north web]# systemctl restart nginx

Я надеюсь, что вы найдете это руководство полезным, и если вы с чем-то застряли, оставьте подробности проблемы в комментариях.

Поклонник технологий, с 2006 года с удовольствием пишу на StealthSettings.com. Обширный опыт работы с операционными системами: macOS, Windows и Linux, а также с языками программирования и платформами для блогов (WordPress) и онлайн-магазинов (WooCommerce, Magento, PrestaShop).

КАК » Linux » Как активировать TLSv1.3 на NGINX? VestaCP / CentOS или Ubuntu
Оставьте комментарий