V tomto návode sa dozviete ako umožniť TLSv1.3 na NGINX. Čo to znamená TLSv 1.3, čo to pomáha a prečo potrebuješ na webovom serveri ako TLS možno aktivovať. Pre servery so systémom riadenia VestaCP (CentOS alebo Ubuntu) je o niečo zložitejšia aktivovať TLS 1.3 ako na serveri cPanel, ale nie je to nemožné.
Obsah
Prečo je to lepšie TLS 1.3 než TLS 1.2?
TLS (Transport Layer Security) je kryptografický protokol ktorý zabezpečuje bezpečnosť pripojenia medzi počítačom a sieťou, ktorej je súčasťou. TLS používa sa v aplikáciách ako: e-mail, messaging, hlasové hovory a videohovory (VoIP), ale najmä pri HTTPS. Zabezpečenie bezpečnej komunikácie medzi počítačom alebo smartfónom používateľa a webovým serverom navštívenej stránky.
TLS 1.3 ponúka a vyššia rýchlosť prepojenia klient – server a a navyše bezpečnosť odstránením niektorých algoritmov. Rozdiely medzi TLSv1.2 a TLSv1.3.
o HTTPS, SSL (Secure Sockets Layer) Povedal som aj v iných článkoch:
- Ako nainštalovať certifikát SSL (HTTPS Connection) pre webovú stránku hosťovanú na serveri NGINX bez cPanelu alebo VestaCP
- Prekompilovať OpenSSL 1.1 a NGINX 1.25 pre TLS 1.3 (CentOS 7)
- Ako presunúť blog alebo webovú stránku WordPress od HTTP ďalej HTTPS (Nginx)
- Odstráňte staré domény Certbot certificates (Zašifrujeme certifikát)
Ako sa aktivujete? TLS 1.3 na NGINX. Server s manažmentom VestaCP / CentOS
Predtým, ako uvidíte, ako sa aktivujete TLSv1.3 na NGINX, musíte zvážiť niektoré minimálne požiadavky TLS 1.3.
- NGINX 1.13.x alebo novší
- Certifikát TLS platný
- Aktívny názov domény so správne nakonfigurovaným DNS – byť dostupný na internete
- Certifikát TLS / SSL platné. Tiež môže byť Let’s Encrypt.
Pe VestaCP nainštalovaný už dávno, máme k dispozícii iba protokol TLS 1.2. V mnohých tutoriáloch som videl, že stačí ako v nginx.conf
pridajme nasledujúci riadok pre cca TLS 1.3, ktorý sa má aktivovať:
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;
falošný. Ak server CentOS s vedením VestaCP, NGINX nebol skompilovaný s minimálnou verziou OpenSSL 1.1.1.1, ssl_protocols TLSv1.2 TLSv1.3;
v nginx.conf
.. vôbec to nepomáha.
[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že vo vyššie uvedenom príklade je Nginx 1.22.0 kompatibilná verzia TLS 1.3, ale knižnica nám nepomáha OpenSSL 1.0.2k-fips.
Na aktiváciu TLSv1.3 na Nginx, musíte najprv nainštalovať podriadené knižnice a vývojové balíčky. Development Tools. Vbehne CentOS 7 príkazových riadkov:
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. Nainštalujte najnovšiu verziu OpenSSL
V súčasnosti je najnovšia verzia OpenSSL 1.1.1p, ale pokial som si vsimol tam je uz a OpenSSL 3. Zdroje nájdete 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
Veľmi dôležité behať make test
pred inštaláciou knižnice. Ak test obsahuje chyby, nespúšťajte ho make install
kým sa chyby neodstránia.
V ďalšom kroku vytvoríme zálohu aktuálneho binárneho súboru openssl
a pridáme symlink
do nového.
mv /usr/bin/openssl /usr/bin/openssl-backup
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
v /usr/local/openssl/bin
vykonať ldd
na kontrolu závislostí openssl. Môžeme tiež skontrolovať verziu openssl. Príkaz 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
Aktuálne máme nainštalovanú najnovšiu verziu OpenSSL ktorý vydrží TLSv1.3. Môžeme skontrolovať verzie TLS / SSL podporované kníhkupectvami OpenSSL na objednávku:
[root@north bin]# openssl ciphers -v | awk '{print $2}' | sort | uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
[root@north bin]#
To neznamená, že webové stránky hostované s pomocou manažéra VestaCP budú mať okamžite TLS 1.3.
Hoci sme nainštalovali OpenSSL 1.1.1p, Nginx je skompilovaný so starou verziou 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. Prekompilujte Nginx pre systém VestaCP
V tomto kroku musíme prekompilovať pre OpenSSL verzia Nginx je už nainštalovaná na systéme CentOS / VestaCP. Ako som uviedol vyššie, v mojom prípade ide o nginx/1.22.0. Keďže hovoríme o webovom serveri, ktorý má VestaCP administračný systém, predtým ako začneme s rekompiláciou, je dobré urobiť zálohu konfiguračných súborov nginx.
Zálohujte aktuálny Nginx v systéme VestaCP
Archivujte a uchovávajte niekde na serveri adresáre "/etc/nginx
„a“/usr/local/vesta/nginx
".
RUN nginx -V
a uložiť existujúce moduly do súboru.
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'
Ako prekompilovať Nginx na inováciu OpenSSL / CentOS 7
Opakujem. Ak máte VestaCP, stiahnite si verziu Nginx, ktorú už máte nainštalovanú. Všetky archívy s verziami Nginx nájdete na 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
Prekompilujeme moduly 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
Teraz máme nainštalovaný Nginx a skompilovaný s najnovšou verziou OpenSSL schopný odolať 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
*ak už bol nginx nainštalovaný na serveri, budete ho musieť odinštalovať. Kompilácia nefunguje pri inovácii nginx.
Ako sa aktivujete? TLSv1.3 pre domény zapnuté VestaCP
V súbore /etc/nginx/nginx.conf
pridávame nasledujúce riadky:
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 úrovni domény som niečo zmenil v šablónach VestaCP a povoliť HTTP/2. Takže pri pridávaní novej domény (example.com) s povoleným Let's Encrypt mám nasledujúci konfiguračný súbor pre 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';
Pred reštartovaním nginx je dobré najskôr otestovať jeho konfiguráciu.
[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
Dúfam, že vám tento návod pomôže a ak sa vám niečo nezdá, zanechajte podrobnosti o probléme v komentároch.