I denne tutorial lærer du hvordan aktivere TLSv1.3 på NGINX. Hvad betyder det TLSv 1.3, hvad hjælper det og hvorfor du mangler på webserveren som TLS kan aktiveres. Til servere med administrationssystem VestaCP (CentOS eller Ubuntu) er lidt sværere at aktivere TLS 1.3 end på en cPanel-server, men det er ikke umuligt.
Indhold
Hvorfor er det bedre TLS 1.3 end TLS 1.2?
TLS (Transport Layer Security) er en kryptografisk protokol som sikrer forbindelsessikkerhed mellem computeren og et netværk, som den er en del af. TLS det bruges i applikationer som: e-mail, messaging, stemme- og videoopkald (VoIP), men især kl HTTPS. Sikring af sikker kommunikation mellem brugerens computer eller smartphone og webserveren på den tilgåede side.
TLS 1.3 tilbyder en højere hastighed til at forbinde klient-server og en Desuden sikkerhed ved at fjerne nogle algoritmer. Forskellene mellem TLSv1.2 og TLSv1.3.
cirka HTTPS, SSL (Secure Sockets Layer) Jeg sagde også i andre artikler:
- Sådan installeres certifikat SSL (HTTPS Forbindelse) for et websted, der hostes på en NGINX-server uden cPanel eller VestaCP
- Kompilere igen OpenSSL 1.1 & NGINX 1.25 til TLS 1.3 (CentOS 7)
- Sådan flytter du en blog eller et websted WordPress fra HTTP til HTTPS (Nginx)
- Slet gamle domæner Certbot certificates (Lad os kryptere certifikat)
Hvordan aktiveres TLS 1.3 på NGINX? Server med VestaCP-styring / CentOS
Før du ser, hvordan du aktiverer TLSv1.3 på NGINX, skal du overveje nogle minimumskrav til TLS 1.3.
- NGINX 1.13.x eller nyere
- Et certifikat TLS gyldig
- Aktivt domænenavn med korrekt konfigureret DNS – være tilgængelig på internettet
- Et certifikat TLS / SSL gyldig. Det kan det også være Let’s Encrypt.
Pe VestaCP installeret for længe siden, har vi kun protokollen tilgængelig TLS 1.2. Jeg har set i mange tutorials, at det er nok som i nginx.conf
lad os tilføje følgende linje for ca TLS 1.3, der skal aktiveres:
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. Hvis server CentOS med ledelsen VestaCP, NGINX er ikke blevet kompileret med minimumsversionen OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3;
în nginx.conf
.. det hjælper overhovedet ikke.
[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
Så i ovenstående eksempel er Nginx 1.22.0 kompatibel version TLS 1.3, men biblioteket hjælper os ikke OpenSSL 1.0.2k-fips.
For at aktivere TLSv1.3 på Nginx, skal du først installere børnebibliotekerne og udviklingspakkerne. Development Tools. Den løber ind CentOS 7 kommandolinjer:
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. Installer den seneste version OpenSSL
På dette tidspunkt er den seneste version OpenSSL 1.1.1p, men så vidt jeg har bemærket er der allerede og OpenSSL 3. Du kan finde kilderne på OpenSSLorg..
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
Meget vigtigt at løbe make test
før du installerer biblioteket. Hvis testen har fejl, skal du ikke køre make install
indtil fejlene er rettet.
I næste trin laver vi en sikkerhedskopi af den aktuelle binære fil openssl
og vi tilføjer symlink
til den nye.
mv /usr/bin/openssl /usr/bin/openssl-backup
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
i /usr/local/openssl/bin
udføre ldd
at kontrollere afhængigheder openssl. Vi kan eventuelt også tjekke versionen af openssl. 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 i øjeblikket den nyeste version installeret OpenSSL som holder ud TLSv1.3. Vi kan tjekke versionerne TLS / SSL støttet af boghandlere OpenSSL efter ordre:
[root@north bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[root@north bin]#
Dette betyder ikke, at websteder hostes med hjælp fra administratoren VestaCP de vil have med det samme TLS 1.3.
Selvom vi har installeret OpenSSL 1.1.1p, Nginx er kompileret med den gamle version 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. Genkompiler Nginx til systemet VestaCP
I dette trin skal vi omkompilere til OpenSSL version af Nginx allerede installeret på systemet CentOS / VestaCP. Som jeg sagde ovenfor, handler det i mit tilfælde om nginx/1.22.0. Da vi taler om en webserver, der har VestaCP administrationssystem, før vi begynder at kompilere igen, er det godt at lave en sikkerhedskopi af nginx-konfigurationsfilerne.
Sikkerhedskopier Nginx-aktuel på systemet VestaCP
Arkivér og gem mapperne et sted på serveren "/etc/nginx
"og"/usr/local/vesta/nginx
".
LØB nginx -V
og gemme eksisterende moduler til 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'
Sådan genkompileres Nginx til opgradering OpenSSL / CentOS 7
Jeg gentager. Hvis du har VestaCP, download den version af Nginx, du allerede har installeret. Du kan finde alle arkiver med Nginx-versioner 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 genkompilerer nginx-modulerne:
./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 installeret og kompileret med den seneste version af OpenSSL i stand til at modstå 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
*hvis nginx allerede var installeret på serveren, skal du afinstallere det. Kompiler virker ikke på nginx-opgradering.
Hvordan aktiveres TLSv1.3 for domæner på VestaCP?
I filen /etc/nginx/nginx.conf
vi tilføjer følgende linjer:
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æneniveau ændrede jeg noget i skabelonerne VestaCP og for at aktivere HTTP/2. Så når jeg tilføjer et nyt domæne (example.com) med Let's Encrypt aktiveret, har jeg følgende konfigurationsfil til 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ør du genstarter nginx, er det godt at teste dens konfiguration først.
[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
Jeg håber, at du finder denne tutorial nyttig, og hvis du sidder fast med noget, skal du efterlade problemdetaljerne i kommentarerne.