Certificat SSL signé gratuit avec Let's Encrypt et Nginx

Rédigé par citizenz - - Aucun commentaire

Voici un moyen simple et gratuit pour passer son site en HTTPS. Il s'agit d'installer et générer un certificat via Let's Encrypt pour Nginx.
Attention : Les certificats générés ne sont valables que 90 jours. Il faudra ensuite les renouveler en réutilisant la méthode décrite dans un autre article.
Sous Debian et avec le serveur Nginx, tout se fait en 2 coups de cuillère à pot.

On commence par installer la version stable de Nginx depuis les dépots officiels :

wget -O - https://nginx.org/keys/nginx_signing.key | apt-key add -
echo "deb http://nginx.org/packages/debian/ $(lsb_release -sc) nginx" > /etc/apt/sources.list.d/nginx.list
apt update
apt install nginx

On ajoute ensuite les backports Debian puis on installe letsencrypt :

echo "deb http://httpredir.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
apt update && apt full-upgrade -y
apt install -t jessie-backports letsencrypt
service nginx stop

Maintenant, il s'agit de demander un certificat pour notre site (notre nom de domaine). Rien de compliqué :

letsencrypt certonly -d www.domaine.tld -d domaine.tld --agree-tos -m contact@domaine.tld --rsa-key-size 4096 --standalone
service nginx start

Maintenant que vos certificats ont été générés et placés dans /etc/letsencrypt/live/monsite.com, on va configurer le fichier du vhost Nginx (fichier .conf dans /etc/nginx/conf.d/).

Voici un exemple complet :

server {
    listen 80;
    server_name monsite.com www.monsite.com;
    return 301 https://www.monsite.com$request_uri;
    access_log /dev/null;
    error_log /dev/null;
}

server {
    listen 443 ssl http2;
    server_name monsite.comwww.monsite.com;

    if ($host = monsite.com) {
        return 301 https://www.monsite.com$request_uri;
    }

    root /var/www/monsite.com/web;

    index index.html index.htm index.php;

    # HTTPS : mise en place de la config et des certificats
    ssl_certificate /etc/letsencrypt/live/www.monsite.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.monsite.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/www.monsite.com/chain.pem;

    ssl_protocols TLSv1.2;
    ssl_ecdh_curve prime256v1;
    ssl_ciphers EECDH+AESGCM:EECDH+AES;
    ssl_prefer_server_ciphers on;
    resolver 80.67.169.12 80.67.169.40 valid=300s;
    resolver_timeout 5s;

    ssl_session_cache shared:SSL:10m;
    add_header Strict-Transport-Security "max-age=15768000";

    location / {
        try_files $uri $uri/ =404;
    }

    access_log /var/www/monsite.com/logs/access.log combined;
    error_log /var/www/monsite.com/logs/error.log error;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

}

On redémarre nginx (service nginx restart) et admirez le "zoli" cadenas vert dans votre barre d'adresse. ON peut lire (en passant la souris sur le cadenas) : "Vérifié par Let's Encrypt) !

CitizenZ : Geek quadra nivernais
fan d'ovalie, de musique, de linuxeries et de Net !

À lire également

Écrire un commentaire

 Se rappeler de moi sur ce site
Quelle est la septième lettre du mot neu86csj ?