Introducció
Requisits
Abans que comencis
Instal·leu el client Acme.sh i obteniu un certificat TLS de Let's Encrypt
Creeu Nginx des de la font
Configureu Nginx per a TLS 1.3
Introducció
TLS 1.3 és una versió del protocol Transport Layer Security (TLS) publicat el 2018 com a estàndard proposat a RFC 8446 . Ofereix millores de seguretat i rendiment respecte als seus predecessors.
Aquesta guia explica com habilitar TLS 1.3 mitjançant el servidor web Nginx a Debian 9.
Requisits
- Versió Nginx
1.13.0o superior.
- Versió OpenSSL
1.1.1o superior.
- Instància Vultr Cloud Compute (VC2) que executa Debian 9 x64 (estirament).
- Un nom de domini vàlid i degudament configurats
A/ AAAA/ CNAMEregistres DNS del seu domini.
- Un certificat TLS vàlid. En obtindrem un de Let's Encrypt.
Abans que comencis
Comproveu la versió de Debian.
lsb_release -ds
# Debian GNU/Linux 9.9 (stretch)
Assegureu-vos que el vostre sistema estigui actualitzat.
apt update && apt upgrade -y
Instal·leu els paquets necessaris.
apt install -y git unzip curl sudo socat build-essential
Creeu un nou compte d'usuari no root amb sudoaccés i canvieu-hi.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
NOTA: Substituïu-lo johndoepel vostre nom d'usuari.
Configura la zona horària.
sudo dpkg-reconfigure tzdata
Instal·leu el client Acme.sh i obteniu un certificat TLS de Let's Encrypt
Descarregar i instal·lar 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
Comproveu la versió.
/etc/letsencrypt/acme.sh --version
# v2.8.2
Obteniu certificats RSA i ECDSA per al vostre domini.
# 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
NOTA: Substituïu-lo example.compel vostre nom de domini.
Després d'executar les ordres anteriors, podreu accedir als vostres certificats i claus a les ubicacions següents:
- RSA :
/etc/letsencrypt/example.com
- ECC/ECDSA :
/etc/letsencrypt/example.com_ecc
Creeu Nginx des de la font
Nginx va afegir suport per a TLS 1.3 a la versió 1.13.0. A la majoria de distribucions de Linux, inclosa Debian 9, Nginx es construeix amb la versió anterior d'OpenSSL, que no és compatible amb TLS 1.3. En conseqüència, necessitem la nostra pròpia compilació personalitzada de Nginx vinculada a la versió 1.1.1 d'OpenSSL, que inclou suport per a TLS 1.3.
Baixeu la darrera versió principal del codi font de Nginx i extreu-la.
wget https://nginx.org/download/nginx-1.17.0.tar.gz && tar zxvf nginx-1.17.0.tar.gz
Baixeu el codi font d'OpenSSL 1.1.1c i extreu-lo.
# 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
Elimina tots els .tar.gzfitxers, ja que ja no són necessaris.
rm -rf *.tar.gz
Introduïu el directori font de Nginx.
cd ~/nginx-1.17.0
Configureu, compileu i instal·leu Nginx. Per simplificar, compilarem només els mòduls essencials necessaris perquè funcioni TLS 1.3. Si necessiteu una compilació completa de Nginx, podeu llegir aquesta guia Vultr sobre la compilació de Nginx.
./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
Creeu un grup i un usuari del sistema Nginx.
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
Enllaç simbòlic /usr/lib/nginx/modulesa /etc/nginx/modules. Aquest últim és un lloc estàndard per als mòduls Nginx.
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
Creeu directoris de memòria cau Nginx i configureu els permisos adequats.
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/*
Comproveu la versió de Nginx.
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 . . .
# . . .
Creeu un fitxer d'unitat Nginx systemd.
sudo vim /etc/systemd/system/nginx.service
Omple el fitxer amb la configuració següent.
[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
Inicieu i activeu Nginx.
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
Crea conf.d, sites-availablei sites-enableddirectoris en /etc/nginx.
sudo mkdir /etc/nginx/{conf.d,sites-available,sites-enabled}
Executeu sudo vim /etc/nginx/nginx.confi afegiu les dues directives següents al final del fitxer, just abans del tancament }.
. . .
. . .
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
}
Deseu el fitxer i sortiu amb :+ W+ Q.
Ara que hem construït Nginx amb èxit, estem preparats per configurar-lo per començar a utilitzar TLS 1.3 al nostre servidor.
Executeu sudo vim /etc/nginx/conf.d/example.com.confi ompliu el fitxer amb la configuració següent.
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;
}
Deseu el fitxer i sortiu amb :+ W+ Q.
Observeu el nou TLSv1.3paràmetre de la ssl_protocolsdirectiva. Aquest paràmetre és necessari per habilitar TLS 1.3.
Comproveu la configuració.
sudo nginx -t
Torna a carregar Nginx.
sudo systemctl reload nginx.service
Per verificar TLS 1.3, podeu utilitzar les eines de desenvolupament del navegador o el servei SSL Labs. Les captures de pantalla següents mostren la pestanya de seguretat de Chrome que indica que TLS 1.3 funciona.

![Com habilitar TLS 1.3 a Nginx a Debian 9 Com habilitar TLS 1.3 a Nginx a Debian 9]()
Felicitats! Heu activat correctament TLS 1.3 al vostre servidor Debian 9.