schema du processus de certification d'un site web

Mise en place d’un serveur HTTPS

Dans le dernier article, nous avions vu comment installer Nginx.

Même si la configuration initiale était fonctionnelle, elle n’est pas des plus sécurisées. Néanmoins elle est essentielle pour l’obtention du certificat let’s encrypt et la mise en place du protocole https.

Je vous propose ainsi dans cet article, de faire la mise en place d’un serveur HTTPS.

Mise en place du certificat let’s encrypt

Le certificat let’s encrypt, nous permet de sécuriser la connexion à notre site web. Cela se traduit par une URL en https et le petit cadenas sur votre navigateur.

En cliquant sur le cadenas, on y apprend que le certificat permet un chiffrement de la connexion ce qui rend très difficile la visualisation de cette page pendant son transit.

Ainsi même si un attaquant détournait la connexion, les informations reçues seraient chiffrées et inutilisables.

Pour générer ce certificat, nous utiliserons certbot.

Si vous avez suivi mon premier article : Installation de WordPress sous Docker, il vous suffira de le compléter.

Nous allons rajouter ces quelques lignes dans notre fichier docker-compose.yml

  certbot:
    image: certbot/certbot:latest
    container_name: certbot
    depends_on:
      - nginx
    command: >-
      certonly --webroot --webroot-path=/var/www/certbot/ --email [votre_email] --agree-tos --no-eff-email -d mamourhome.duckdns.org

    volumes:
      - ${CERTBOT_WWW}:/var/www/certbot/:rw
      - ${CERTBOT_CONF}:/etc/letsencrypt/:rw
      - ${CERTBOT_LOGS}:/var/log/letsencrypt/

Pensez à rajouter les volumes commun dans votre service nginx dans le fichier docker-compose.yml.

Soit :

- ${CERTBOT_WWW}:/var/www/certbot/:ro
- ${CERTBOT_CONF}:/etc/nginx/ssl/:ro

Puis déclarer les variables dans le fichier .env

#certbot setting
export CERTBOT_WWW=./certbot/www
export CERTBOT_CONF=./certbot/letsencrypt
export CERTBOT_LOGS=./logs/certbot

Il faudra également indiquer le chemin d’accès au certificat dans le fichier default.conf.

Ajouter dans le fichier default.conf :

include nginxconfig.io/letsencrypt.conf

Puis créer le fichier letsencrypt.conf dans le répertoire nginxconfig.io

Puis ajouter à ce fichier :

location ~ /.well-known/acme-challenge {
     allow all;
     root /var/www/certbot;
}

Modifier votre fichier docker-compose.yml, et rajouter toujours dans le service Nginx le volume qui gérera le repertoire nginxconfig.io.

- ${NGINX_CONFIG_IO}:/etc/nginx/nginxconfig.io/:ro

Puis mettre à jour le fichier .env avec les dernieres instructions :

export NGINX_CONFIG_IO=./nginx/nginxconfig.io

Une fois toutes ces mises à jour effectuées, vous pourrez lancer l’obtention du certificat en lançant cette commande.

sudo docker compose run certbot

Et si tout se passe bien, vous verrez dans votre terminal ce petit message :

Do you want to expand and replace this existing certificate with the new
certificate?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(E)xpand/(C)ancel: E
Renewing an existing certificate for www.laclefdigitale.fr and 5 more domains

Successfully received certificate.

Maintenant que nous avons le certificat, nous allons indiquer à notre serveur web, qu’il faudra toujours emprunter le protocole https

Nous allons donc modifier le fichier default.conf comme ceci :


server {
    listen                  443 ssl;
    http2                   on;
    listen                  [::]:443 ssl;
    server_name             mamourhome.duckdns.org;
    set                     $base /var/www/html/mamour;
    root                    $base;

    index index.php;
    # SSL
    ssl_certificate         /etc/nginx/ssl/live/www.laclefdigitale.fr/fullchain.pem;
    ssl_certificate_key     /etc/nginx/ssl/live/www.laclefdigitale.fr/privkey.pem;
    ssl_trusted_certificate /etc/nginx/ssl/live/www.laclefdigitale.fr/chain.pem;

        location / {
           proxy_pass http://backnginx;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_next_upstream error timeout http_500;
        }

}

server{
        listen 80;
        listen [::]:80;

        server_name mamourhome.duckdns.org;

        include nginxconfig.io/letsencrypt.conf;

   location / {
        return 301 https://mamourhome.duckdns.org$request_uri;
    }
}

Et maintenant en tapant : https://mamourhome.duckdns.org, nous avons bien notre connexion chiffrée et notre petit cadenas.

Conclusion

Ainsi grâce aux certificats TLS de let’s encrypt et à Certbot, nous avons pu faire la mise en place d’un serveur HTTPS. C’est le premier pas pour sécuriser nos applications sur internet.

Dans le prochain article, nous modifierons la structure de notre Nginx pour y rajouter la possibilité d’héberger plusieurs site web.