Як ви активуєте? 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 пропонує а більш висока швидкість підключення клієнт – сервер і a До того ж безпеку шляхом усунення деяких алгоритмів. Відмінності між TLSv1.2 і TLSv1.3.

Про HTTPS, SSL (Secure Sockets Layer) Я також сказав в інших статтях:

Як ви активуєте? TLS 1.3 на NGINX. Сервер з управлінням VestaCP / CentOS

Перш ніж ви побачите, як ви активуєте TLSверсії 1.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

На цьому кроці нам потрібно перекомпілювати for 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
Залишити коментар