Sintesi

In questo breve tutorial vedremo, grazie allo splendido generatore nginxconfig offerto da Digital Ocean, come installare per passi un certificato SSL con Let's Encrypt – utilizzando Certbot – per un servizio in reverse proxy su Nginx, raggiungendo la massima certificazione A+ su SSL Labs, testando il tutto su di una Ubuntu 18.04 su di una virtuale del servizio Lightsail di AWS.

Prove con nginxconfig.io

  • sul pannello di Lightsail
    • creo una virtuale AWS Lightsail
    • associo un IP statico alla virtuale che servirà per indicarlo nei DNS
  • sui DNS del mio dominio, associo un record A (in questo esempio, aaa.kiwifarm.it), con l'intenzione di utilizzarlo per provare HTTPS.

HTTPS

Server HTTP locale

Apro una prima shell, collegandomi con

ssh -i xxx.pem ubuntu@aaa.kiwifarm.it

Mando in esecuzione un server, in questo caso, uso una funzione di base di Python come esempio sulla porta locale 3000.

mkdir tmp
cd tmp/
echo "a" > index.html
python3 -m http.server 3000

Apro una seconda shell e lancio i seguenti comandi per l'installazione di Certbot, al quale, quando verrà chiesto di indicare un dominio, risponderò con aaa.kiwifarm.it.

sudo su
apt-get update
apt-get install software-properties-common
add-apt-repository universe
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install certbot python-certbot-nginx
certbot --nginx --register-unsafely-without-email

nginxconfig.io

Vado su nginxconfig.io e creo una configurazione HTTPS proxy per il mio dominio di terzo livello.

Sommariamente (indico solo le parti da modificare)

  • Per-Website Config
    • Presets: no
    • Server: Domain
    • HTTPS: tutto abilitato e Let's Encrypt
    • PHP: no
    • Python: no
    • Reverse Proxy:
    • Routing: default
    • Logging:
      • enabled
      • enabled
  • Global Config: non modifico nulla

Scarico lo zip generato prima in locale, caricandolo poi sulla virtuale come segue.

scp -i xxx.pem \
nginxconfig.io-aaa.kiwifarm.it.zip \
ubuntu@aaa.kiwifarm.it:

Torno sulla seconda shell e, per sicurezza, creo un backup della cartella di configurazione di Nginx

cd /etc
tar cvfz nginx.tgz nginx/
mv nginx.tgz /home/ubuntu

In seguito, scompatto il file creato da nginxconfig.io (servirà installare unzip) e creo i file e le cartelle necessari per Nginx (dhparam.pem e /var/www/_letsencrypt/)

mv /home/ubuntu/nginxconfig.io-tmpn.kiwifarm.it.zip /etc/nginx
cd /etc/nginx
apt-get install unzip
unzip nginxconfig.io-tmpn.kiwifarm.it.zip
openssl dhparam -out /etc/nginx/dhparam.pem 2048
mkdir -p /var/www/_letsencrypt
chown www-data /var/www/_letsencrypt
rm sites-enabled/default

Volendo, posso inoltre commentare, in /etc/nginx/sites-available/tmpn.kiwifarm.it la riga

root /var/www/tmpn.kiwifarm.it/public;

perché, pur essendo creata dal generatore, è di fatto superflua, nel caso di reverse proxy.

Rilancio nginx con

nginx -t
systemctl reload nginx

Verifico con un browser che ora la mia pagina è servita con HTTPS all'indirizzo https://aaa.kiwifarm.it/.

Vado su SSL Labs e valido il certificato, ottenendo il massimo: A+.

Schermata-2020-05-20-alle-16.40.42

HTTP

Ripeto la procedura, evitando la parte HTTPS e ottenendo uno zip più semplice.

--

Photo by Amos Bar-Zeev on Unsplash