Σε αυτό το σεμινάριο θα μάθετε πώς επιτρέπουν 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 χρησιμοποιείται σε εφαρμογές όπως: ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ, μηνυμάτων, φωνητικές και βιντεοκλήσεις (VoIP), αλλά κυρίως στο HTTPS. Διασφάλιση ασφαλούς επικοινωνίας μεταξύ του υπολογιστή ή του smartphone του χρήστη και του διακομιστή web της σελίδας στην οποία έχει πρόσβαση.
TLS 1.3 προσφέρει α μεγαλύτερη ταχύτητα σύνδεσης πελάτη – διακομιστή και α Επιπλέον ασφαλείας με την εξάλειψη ορισμένων αλγορίθμων. Οι διαφορές μεταξύ 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)
- Πώς να μετακινήσετε ένα blog ή έναν ιστότοπο WordPress από το HTTP ενεργοποιημένο HTTPS (Nginx)
- Διαγραφή παλιών τομέων 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. Έχω δει σε πολλά tutorials ότι είναι αρκετό όπως στο 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. Οργ.
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
Σε αυτό το βήμα πρέπει να κάνουμε εκ νέου μεταγλώττιση για OpenSSL η έκδοση του Nginx είναι ήδη εγκατεστημένη στο σύστημα CentOS / VestaCP. Όπως είπα παραπάνω, στη δική μου περίπτωση πρόκειται για nginx/1.22.0. Μιας και μιλάμε για webserver που έχει 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
Ελπίζω να βρείτε αυτό το σεμινάριο χρήσιμο και αν έχετε κολλήσει με κάτι, αφήστε τις λεπτομέρειες του προβλήματος στα σχόλια.