Categoria: nginx

  • Let’s encrypt e nginx

    Durante l’ultima workweek Mozilla a Orlando ho assistito a una breve presentazione di Let’s Encrypt da parte di Eric Rescorla (:ekr). Mi ero ripromesso di fare qualche prova al ritorno e, complice il passaggio da dedicato+debian+apache a vps+ubuntu+nginx, mi sono finalmente deciso a farlo.

    Che cos’è “Let’s Encrypt”: un’autorità di certificazione indipendente e aperta che permette al proprietario di un sito web di ottenere gratuitamente dei certificati. Per ulteriori dettagli consiglio la lettura del post inaugurale del blog.

    Veniamo al dunque: come ottenere un certificato per il dominio che ospita questo blog e configurare nginx per utilizzarlo.

    Per prima cosa bisogna clonare il repository (non esiste ancora un pacchetto per Ubuntu):

    git clone https://github.com/letsencrypt/letsencrypt
    cd letsencrypt
    

    Come spiegato nella documentazione: letsencrypt-auto è un wrapper che si occupa di installare le dipendenze e creare un ambiente virtuale per Python, e il plugin per nginx è ancora altamente sperimentale (al contrario di Apache).

    Nel mio caso voglio:

    • ottenere solamente il certificato senza modificare alcuna configurazione;
    • utilizzare il webserver “standalone” per recuperare il certificato. Siccome il plugin occupa la porta 80 o la 443, potrebbe essere necessario bloccare temporaneamente il server nginx.

    Questo è il contenuto del file di configurazione per evitare una linea di comando infinita (modificare l’indirizzo email)

    # Use a 4096 bit RSA key instead of 2048
    rsa-key-size = 4096
    email = YOUREMAIL@EXAMPLE.COM
    
    # Standalone authenticator on port 443
    authenticator = standalone
    standalone-supported-challenges = tls-sni-01
    

    E questo il comando da lanciare (modificare il dominio e il percorso al file di configurazione)

    ./letsencrypt-auto certonly --config /root/cli.ini -d EXAMPLE.COM
    

    La prima volta verrà chiesto di accettare le condizioni di servizio. Dopo pochi istanti il certificato verrà salvato in una sottocartella di /etc/letsencrypt/live/.

    A questo punto bisogna aggiornare la configurazione del dominio in nginx. Personalmente ho utilizzato il generatore messo a disposizione da Mozilla, modificando

        ssl_dhparam /etc/nginx/dhparam.pem;
        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    

    E rimuovendo la linea ssl_session_tickets off; (non compatibile con la mia versione di nginx).

    Per utilizzare questa configurazione, la prima volta bisogna generare una chiave Diffie-Hellman:

    cd /etc/nginx
    openssl dhparam -out dhparam.pem 2048
    

    Se riuscite a leggere questo post, significa che non è esploso nulla.