W tym samouczku dowiesz się, jak to zrobić umożliwiać TLSv1.3 na NGINX. Co to znaczy TLSv 1.3, co to pomaga i dlaczego potrzebujesz na serwerze internetowym jako TLS można aktywować. Dla serwerów z systemem zarządzania VestaCP (CentOS lub Ubuntu) jest nieco trudniejsze aktywować TLS 1.3 niż na serwerze cPanel, ale nie jest to niemożliwe.
Zawartość
Dlaczego jest lepiej TLS 1.3 niż TLS 1.2?
TLS (Transport Layer Security) jest protokół kryptograficzny co zapewnia bezpieczeństwo połączenia między komputerem a siecią, której jest częścią. TLS jest używany w aplikacjach takich jak: E-mail, wiadomości, połączenia głosowe i wideo (VoIP), ale przede wszystkim o godz HTTPS. Zapewnienie bezpiecznej komunikacji między komputerem lub smartfonem użytkownika a serwerem WWW odwiedzanej strony.
TLS 1.3 oferuje wyższa prędkość połączenia klient – serwer i a Ponadto bezpieczeństwo eliminując niektóre algorytmy. Różnice między TLSv1.2 i TLSv1.3.
despre HTTPS, SSL (Secure Sockets Layer) Powiedziałem też w innych artykułach:
- Jak zainstalować certyfikat SSL (HTTPS Połączenie) dla strony internetowej hostowanej na serwerze NGINX bez cPanel lub VestaCP
- Przekompilować OpenSSL 1.1 i NGINX 1.25 dla TLS 1.3 (CentOS 7)
- Jak przenieść bloga lub stronę internetową WordPress z HTTP na HTTPS (Nginx)
- Usuń stare domeny Certbot certificates (Zaszyfrujmy certyfikat)
Jak aktywować TLS 1.3 na NGINX? Serwer z zarządzaniem VestaCP / CentOS
Zanim zobaczysz, jak się aktywujesz TLSv1.3 na NGINX, musisz wziąć pod uwagę pewne minimalne wymagania TLS 1.3.
- NGINX 1.13.x lub nowszy
- Certyfikat TLS ważny
- Aktywna domena z odpowiednio skonfigurowanym DNS – bądź dostępna w Internecie
- Certyfikat TLS / SSL ważny. Może być również Let’s Encrypt.
Pe VestaCP zainstalowany dawno temu, mamy tylko protokół TLS 1.2. Widziałem w wielu tutorialach, że wystarczy jak w nginx.conf
dodajmy następującą linię dla ca TLS 1.3 do aktywacji:
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;
Podróbka. Jeśli serwer CentOS z zarządzaniem VestaCP, NGINX nie został skompilowany z wersją minimalną OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3;
în nginx.conf
.. to wcale nie pomaga.
[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
Tak więc w powyższym przykładzie Nginx 1.22.0 jest kompatybilną wersją TLS 1.3, ale biblioteka nam nie pomaga OpenSSL 1.0.2k-fips.
Aktywować TLSv1.3 na Nginx, musisz najpierw zainstalować biblioteki potomne i pakiety programistyczne. Development Tools. Wchodzi CentOS 7 linii poleceń:
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. Zainstaluj najnowszą wersję OpenSSL
W tej chwili najnowsza wersja jest OpenSSL 1.1.1p, ale z tego co zauważyłem jest już i OpenSSL 3. Możesz znaleźć źródła na 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
Bardzo ważne, aby biegać make test
przed zainstalowaniem biblioteki. Jeśli test zawiera błędy, nie uruchamiaj go make install
do czasu usunięcia błędów.
W kolejnym kroku wykonujemy kopię zapasową bieżącego pliku binarnego openssl
i dodajemy symlink
do nowego.
mv /usr/bin/openssl /usr/bin/openssl-backup
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
w /usr/local/openssl/bin
wykonać ldd
aby sprawdzić zależności openssl. Możemy ewentualnie sprawdzić wersję openssl. Rozkaz 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
Obecnie mamy zainstalowaną najnowszą wersję OpenSSL który trwa TLSv1.3. Wersje możemy sprawdzić TLS / SSL wspierane przez księgarnie OpenSSL na zamówienie:
[root@north bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[root@north bin]#
Nie oznacza to, że strony internetowe są hostowane z pomocą menedżera VestaCP będą mieli natychmiast TLS 1.3.
Chociaż zainstalowaliśmy OpenSSL 1.1.1p, Nginx jest kompilowany ze starą wersją 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. Ponownie skompiluj Nginx dla systemu VestaCP
W tym kroku musimy przekompilować dla OpenSSL wersja Nginx już zainstalowana w systemie CentOS / VestaCP. Jak pisałem wyżej, w moim przypadku chodzi o ok nginx/1.22.0. Ponieważ mówimy o serwerze WWW, który ma VestaCP systemu administracyjnego, zanim przystąpimy do rekompilacji dobrze jest wykonać kopię zapasową plików konfiguracyjnych nginx.
Wykonaj kopię zapasową prądu Nginx w systemie VestaCP
Zarchiwizuj i przechowuj gdzieś na serwerze katalogi "/etc/nginx
" i "/usr/local/vesta/nginx
".
URUCHOMIĆ nginx -V
i zapisz istniejące moduły do pliku.
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'

Jak ponownie skompilować Nginx w celu aktualizacji OpenSSL / CentOS 7
Powtarzam. Jeśli masz VestaCP, pobierz wersję Nginx, którą już zainstalowałeś. Możesz znaleźć wszystkie archiwa z włączonymi wersjami 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
Rekompilujemy moduły 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
Mamy teraz zainstalowany i skompilowany Nginx z najnowszą wersją OpenSSL w stanie wytrzymać 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
*jeśli nginx był już zainstalowany na serwerze, musisz go odinstalować. Kompilacja nie działa na aktualizacji nginx.
Jak aktywować TLSv1.3 dla domen w VestaCP?
W pliku /etc/nginx/nginx.conf
dodajemy następujące wiersze:
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';
Na poziomie domeny zmieniłem coś w szablonach VestaCP i włączyć HTTP/2. Więc kiedy dodaję nową domenę (example.com) z włączonym Let's Encrypt, mam następujący plik konfiguracyjny dla 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';
Przed ponownym uruchomieniem nginx dobrze jest najpierw przetestować jego konfigurację.
[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
Mam nadzieję, że ten samouczek okaże się pomocny, a jeśli utkniesz z czymś, zostaw szczegóły problemu w komentarzach.