Hur man aktiverar TLSv1.3 på NGINX. VestaCP pe CentOS med OpenSSL

I den här handledningen kommer vi att se hur Aktivera TLSv1.3 på NGINX, låt oss förstå lite vad betyder det detta TLS 1.3 vad som hjälper och varför vi behöver på webbservern som TLS ska aktiveras. Låt oss förstå varför på en server med VestaCP (CentOS eller Ubuntu) är lite svårare att aktivera TLS 1.3 än på en cPanel-server. Eller på en server där vi inte har någon programvara för hostinghantering.

Varför är det bättre TLS 1.3 än TLS 1.2?

TLS (Transport Layer Security) Är kryptografiskt protokoll som säkerställer anslutningssäkerhet mellan datorn och ett nätverk den tillhör. TLS används i applikationer som: e-mail, meddelanden, röst- och videosamtal (VoIP), men särskilt kl HTTPS. Säkerställande av en säker kommunikation mellan användarens dator eller smartphone och webbservern på den öppnade sidan.

TLSv1.3 tillhandahåller en högre hastighet klient - serveranslutning och en Dessutom säkerhet genom att eliminera vissa algoritmer. Skillnaderna mellan TLSv1.2 och TLSv1.3.

om HTTPS, SSL (Secure Sockets Layer) Jag sa också i andra artiklar:

Hur man aktiverar TLSv1.3 på NGINX. Server med VestaCP installerad på CentOS

Innan vi ser hur vi aktiverar TLSv1.3 på NGINX måste vi ha ett minimum av mjukvarukrav och bibliotek närvarande.

  1. NGINX 1.13.x eller senare
  2. Ett certifikat TLS giltigt
  3. Aktivt domännamn med korrekt konfigurerad DNS - för att vara tillgänglig på internet
  4. Ett certifikat TLS / SSL giltig. Det kan också vara Let's Encrypt.

På en VestaCP installerat för länge sedan, vi har bara protokollet TLS 1.2. Jag har sett i många tutorials att det räcker som i nginx.conf låt oss lägga till följande rad eftersom TLS 1.3 som ska aktiveras:

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;

Falsk. Om server CentOS cu VestaCP, NGINX har inte kompilerats med minimiversionen av OpenSSL 1.1.1.1 ssl_protocols TLSv1.2 TLSv1.3; in nginx.conf det hjälper oss inte alls.

[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

Därför är Nginx 1.22.0 i exemplet ovan kompatibel med TLSv1.3, men Open-biblioteket hjälper oss inteSSL 1.0.2k-fips.

Att aktivera TLSv1.3 på Nginx måste vi först installera barnens bibliotek och utvecklingspaket. Utvecklings verktyg. Vi springer vidare CentOS 7 kommandorader:

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. Installera den senaste Open-versionenSSL

För närvarande är den senaste versionen öppenSSL 1.1.1p, men vad jag märkte finns det redan OpenSSL 3. Du kan hitta källorna på ÖppenSSL. 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 

Väldigt viktigt att springa make test innan du installerar biblioteket. Om fel uppstod under testet, kör inte make install tills felen är åtgärdade.

I nästa steg säkerhetskopierar vi den nuvarande öppna binära filenssl och vi lägger till symbollänk till den nya.

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

In /usr/local/openssl/bin Kör ldd för att kontrollera om det finns öppna beroendenssl. Vi kan också kontrollera den öppna versionenssl. Kommando 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

Vi har för närvarande den senaste versionen av Open installeradSSL stödja TLSv1.3. Vi kan kontrollera versionerna TLS / SSL stöds av öppna bibliotekSSL på order av:

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

Detta betyder inte att webbplatser finns på VestaCP de kommer att ha omedelbart TLS 1.3. varken macar Nginx är ännu inte kompilerad för den nya versionen av OpenSSL.

Även om vi har Open installeratSSL 1.1.1p, Nginx kompileras med den gamla Open-versionenSSL 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. Kompilera om Nginx på VestaCP

I detta steg måste vi kompilera om för OpenSSL versionen av Nginx som redan är installerad pe CentOS / VestaCP. Som jag sa ovan, i mitt fall handlar det om nginx / 1.22.0. Handlar om en webbserver som har VestaCP som ett system av adminInnan du startar omkompileringen är det bra att säkerhetskopiera nginx-konfigurationsfilerna.

Aktuell Nginx backup på VestaCP

Arkivera och lagra kataloger någonstans på servern "/etc/nginx"Och"/usr/local/vesta/nginx".

avrättade nginx -V och spara de befintliga modulerna till en fil.

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'
Hur man aktiverar TLSv1.3 på NGINX
Hur man aktiverar TLSv1.3 på NGINX

Vi laddar ner och kompilerar Nginx

Upprepa. Om du har VestaCP, ladda ner versionen av Nginx som du redan har installerat. Alla arkiv med Nginx-versioner finns på 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

Vi kompilerar om nginx-modulerna:

./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

Vi har nu Nginx installerat och kompilerat med den senaste versionen av OpenSSL kunna stå emot 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

Hur man aktiverar TLSv1.3 för domäner på VestaCP

I filen / etc / nginx /nginx.conf vi lägger till följande rader:

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';

På domännivå ändrade jag något i mallarna VestaCP och för att aktivera HTTP / 2. Så när jag lägger till en ny domän (example.com) med Let's Encrypt aktiverat, har jag följande konfigurationsfil för 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';

Före dig restartdu har nginx är det bra att innan du testar dess konfiguration.

[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

Jag hoppas att du tycker att den här handledningen är användbar, och om du inte lyckas med något, lämna detaljerna om problemet i kommentarerna.

Stealth: Passionerad om teknik, jag gillar att testa och skriva handledning om operativsystem macOS, Linux, Windows, handla om WordPress, WooCommerce och konfigurera LEMP webbservrar (Linux, NGINX, MySQL och PHP). jag skriver vidare StealthSettings.com sedan 2006, och några år senare började jag skriva på iHowTo.Tips handledning och nyheter om enheter i ekosystemet Apple: iPhone, iPad, Apple Klocka, HomePod, iMac, MacBook, AirPods och tillbehör.
Ny i