В этом уроке вы узнаете, как включите 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) Я же говорил в других статьях:
- Как установить сертификат SSL (HTTPS Connection) для веб-сайта, размещенного на сервере NGINX без cPanel или VestaCP
- перекомпилировать OpenSSL 1.1 и NGINX 1.25 для TLS 1.3 (CentOS 7)
- Как переместить блог или сайт WordPress с HTTP на HTTPS (НГИНКС)
- Удалить старые домены Certbot certificates (Давайте зашифруем сертификат)
Как активировать TLS 1.3 на NGINX? Сервер с управлением VestaCP / CentOS
Прежде чем вы увидите, как вы активируете TLSv1.3 на NGINX необходимо учитывать некоторые минимальные требования для TLS 1.3.
- NGINX 1.13.x или новее
- Сертификат TLS действительный
- Активное доменное имя с правильно настроенным DNS — быть доступным в Интернете
- Сертификат 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
.. совсем не помогает.
[[email protected] ~]# 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
.
[[email protected] 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)
[[email protected] bin]# openssl version
OpenSSL 1.1.1p 21 Jun 2022
В настоящее время у нас установлена последняя версия OpenSSL который терпит TLSv1.3. Мы можем проверить версии TLS / SSL при поддержке книжных магазинов OpenSSL по порядку:
[[email protected] bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[[email protected] bin]#
Это не означает, что сайты, размещенные с помощью менеджера VestaCP они будут иметь немедленно TLS 1.3.
Хотя мы установили OpenSSL 1.1.1p, Nginx скомпилирован со старой версией OpenSSL 1.0.2k-fips.
[[email protected] 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'
[[email protected] bin]# openssl version
OpenSSL 1.1.1p 21 Jun 2022
[[email protected] 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'

Как перекомпилировать 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.
[[email protected] 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 рекомендуется сначала протестировать его конфигурацию.
[[email protected] web]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[[email protected] web]# systemctl restart nginx
Я надеюсь, что вы найдете это руководство полезным, и если вы с чем-то застряли, оставьте подробности проблемы в комментариях.