У цьому посібнику ви дізнаєтесь, як активізувати 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) Я також сказав в інших статтях:
- Як встановити сертифікат SSL (HTTPS Підключення) для веб-сайту, розміщеного на сервері NGINX без cPanel або VestaCP
- перекомпілювати OpenSSL 1.1 & NGINX 1.25 для TLS 1.3 (CentOS 7)
- Як перемістити блог або веб-сайт WordPress з HTTP на HTTPS (Nginx)
- Видаліть старі домени Certbot certificates (Давайте зашифруємо сертифікат)
Як ви активуєте? TLS 1.3 на NGINX. Сервер з управлінням VestaCP / CentOS
Перш ніж ви побачите, як ви активуєте TLSверсії 1.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
.. це зовсім не допомагає.
[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'

Як перекомпілювати 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
Сподіваюся, ви знайдете цей підручник корисним, і якщо ви застрягли з чимось, залиште подробиці проблеми в коментарях.