Uvod
Zahtjevi
Prije nego što počneš
Instalirajte Acme.sh klijent i pribavite TLS certifikat od Let's Encrypt
Izgradite Nginx iz izvora
Konfigurirajte Nginx za TLS 1.3
Uvod
TLS 1.3 verzija je protokola Transport Layer Security (TLS) objavljenog 2018. kao predloženi standard u RFC 8446 . Nudi poboljšanja sigurnosti i performansi u odnosu na svoje prethodnike.
Ovaj vodič objašnjava kako omogućiti TLS 1.3 pomoću Nginx web poslužitelja na Debianu 9.
Zahtjevi
- Nginx verzija
1.13.0ili novija.
- OpenSSL verzija
1.1.1ili novija.
- Vultr Cloud Compute (VC2) instanca koja pokreće Debian 9 x64 (stretch).
- Ispravan naziv domene i ispravno konfigurirani
A/ AAAA/ CNAMEDNS zapisi za vašu domenu.
- Važeći TLS certifikat. Dobit ćemo jedan od Let's Encrypt.
Prije nego što počneš
Provjerite verziju Debiana.
lsb_release -ds
# Debian GNU/Linux 9.9 (stretch)
Provjerite je li vaš sustav ažuriran.
apt update && apt upgrade -y
Instalirajte potrebne pakete.
apt install -y git unzip curl sudo socat build-essential
Stvorite novi nekorijenski korisnički račun s sudopristupom i prebacite se na njega.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
NAPOMENA: Zamijenite johndoesvojim korisničkim imenom.
Postavite vremensku zonu.
sudo dpkg-reconfigure tzdata
Instalirajte Acme.sh klijent i pribavite TLS certifikat od Let's Encrypt
Preuzmite i instalirajte Acme.sh .
sudo mkdir /etc/letsencrypt
sudo git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail your_email@example.com
cd ~
source ~/.bashrc
Provjerite verziju.
/etc/letsencrypt/acme.sh --version
# v2.8.2
Nabavite RSA i ECDSA certifikate za svoju domenu.
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength 2048
# ECDSA
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength ec-256
NAPOMENA: Zamijenite example.coms imenom svoje domene.
Nakon izvođenja prethodnih naredbi, vaši certifikati i ključevi dostupni su na sljedećim mjestima:
- RSA :
/etc/letsencrypt/example.com
- ECC/ECDSA :
/etc/letsencrypt/example.com_ecc
Izgradite Nginx iz izvora
Nginx je dodao podršku za TLS 1.3 u verziji 1.13.0. Na većini Linux distribucija, uključujući Debian 9, Nginx je izgrađen sa starijom verzijom OpenSSL-a, koja ne podržava TLS 1.3. Posljedično, potrebna nam je vlastita prilagođena Nginx verzija povezana s izdanjem OpenSSL 1.1.1, što uključuje podršku za TLS 1.3.
Preuzmite najnoviju glavnu verziju izvornog koda Nginxa i raspakirajte je.
wget https://nginx.org/download/nginx-1.17.0.tar.gz && tar zxvf nginx-1.17.0.tar.gz
Preuzmite izvorni kod OpenSSL 1.1.1c i raspakirajte ga.
# OpenSSL version 1.1.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz
Izbrišite sve .tar.gzdatoteke jer više nisu potrebne.
rm -rf *.tar.gz
Unesite izvorni direktorij Nginxa.
cd ~/nginx-1.17.0
Konfigurirajte, kompajlirajte i instalirajte Nginx. Radi jednostavnosti, sastavit ćemo samo bitne module koji su potrebni za rad TLS 1.3. Ako vam je potrebna potpuna verzija Nginxa , možete pročitati ovaj Vultr vodič o kompilaciji Nginxa .
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=Debian \
--builddir=nginx-1.17.0 \
--http-log-path=/var/log/nginx/access.log \
--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 \
--with-compat \
--with-http_ssl_module \
--with-http_v2_module \
--with-openssl=../openssl-1.1.1c \
--with-openssl-opt=no-nextprotoneg \
--without-http_rewrite_module \
--without-http_gzip_module
make
sudo make install
Napravite grupu i korisnika Nginx sustava.
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
Simbolna veza /usr/lib/nginx/modulesna /etc/nginx/modules. Potonje je standardno mjesto za Nginx module.
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Stvorite Nginx cache direktorije i postavite odgovarajuća dopuštenja.
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*
Provjerite verziju Nginxa.
sudo nginx -V
# nginx version: nginx/1.17.0 (Debian)
# built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
# built with OpenSSL 1.1.1c 28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx . . .
# . . .
Napravite Nginx systemd jediničnu datoteku.
sudo vim /etc/systemd/system/nginx.service
Popunite datoteku sljedećom konfiguracijom.
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
Pokrenite i omogućite Nginx.
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
Stvaranje conf.d, sites-availablei sites-enableddirektorije u /etc/nginx.
sudo mkdir /etc/nginx/{conf.d,sites-available,sites-enabled}
Pokrenite sudo vim /etc/nginx/nginx.confi dodajte sljedeće dvije direktive na kraj datoteke, neposredno prije zatvaranja }.
. . .
. . .
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
}
Spremite datoteku i izađite s :+ W+ Q.
Sada kada smo uspješno izgradili Nginx, spremni smo ga konfigurirati da počne koristiti TLS 1.3 na našem poslužitelju.
Pokrenite sudo vim /etc/nginx/conf.d/example.com.confi popunite datoteku sljedećom konfiguracijom.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
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';
ssl_prefer_server_ciphers on;
}
Spremite datoteku i izađite s :+ W+ Q.
Obratite pažnju na novi TLSv1.3parametar ssl_protocolsdirektive. Ovaj parametar je neophodan za omogućavanje TLS 1.3.
Provjerite konfiguraciju.
sudo nginx -t
Ponovno učitajte Nginx.
sudo systemctl reload nginx.service
Da biste potvrdili TLS 1.3, možete koristiti alate za razvoj preglednika ili uslugu SSL Labs. Snimke zaslona u nastavku prikazuju Chromeovu sigurnosnu karticu koja pokazuje da TLS 1.3 radi.

![Kako omogućiti TLS 1.3 u Nginxu na Debianu 9 Kako omogućiti TLS 1.3 u Nginxu na Debianu 9]()
Čestitamo! Uspješno ste omogućili TLS 1.3 na svom Debian 9 poslužitelju.