Comment installer Nginx avec Let’s encrypt et obtenir A+ au test SSLLabs

Dans ce tutoriel, je vais te montrer, étape par étape, comment installer et configurer le serveur Web Nginx avec le certificat Letsencrypt. Ce guide te parlera de l’installation du serveur Web Nginx, de l’installation de l’outil let’s encrypt, de la génération du certificat SSL letsencrypt, de la configuration de l’hôte virtuel nginx avec SSL et de la création d’une configuration SSL supplémentaire pour obtenir le A+ du test SSL Labs.

Conditions préalables

  • Serveur Linux – Ubuntu 18.04 ou CentOS 7.5
  • Privilèges de racine

Ce que nous allons faire ?

  1. Installer le serveur Web Nginx
  2. Configurer le pare-feu UFW/Firewalld
  3. Installer let’s encrypt et générer le certificat SSL
  4. Configurer Secure SSL
  5. Configurer l’hôte virtuel Nginx avec SSL
  6. Test de

Étape 1 – Installer le serveur Web Nginx

Dans ce tutoriel, nous allons te guider pour installer et configurer le serveur Web Nginx avec Letsencrypt sur les deux serveurs Linux – Ubuntu 18.04 et CentOS 7.5.

Sur Ubuntu 18.04.

Mets à jour le dépôt et installe ensuite nginx à l’aide de la commande apt ci-dessous.

sudo apt update
sudo apt install nginx -y

Sur CentOS 7.5.

Installe le référentiel EPEL sur le système CentOS et installe Nginx à l’aide de la commande yum.

sudo yum install epel-release -y
sudo yum install nginx -y

Une fois l’installation terminée, démarre le service Nginx et active-le pour qu’il se lance à chaque fois au démarrage du système.

systemctl start nginx
systemctl enable nginx

Le serveur Web Nginx est maintenant installé et il fonctionne sur le port HTTP 80 par défaut. Vérifie-le à l’aide de la commande netstat ci-dessous.

netstat -plntu

Installe le serveur web Nginx

Étape 2 – Configurer le pare-feu UFW – Firewalld

Il est recommandé d’activer le Pare-feu sur le serveur et d’ouvrir le port spécifique si nécessaire. Dans cette étape, nous allons montrer comment ouvrir les ports SSH, HTTP et HTTPS sur les serveurs Linux Ubuntu 18.04 en utilisant le pare-feu UFW, et Firewalld sur le système CentOS 7.5.

Sur Ubuntu 18.04 – Pare-feu UFW

Avant d’activer le pare-feu UFW sur le système Ubuntu, assure-toi que le port SSH est activé dans la configuration du pare-feu de la liste.

Ajoute le port du service SSH à la configuration du pare-feu à l’aide de la commande ufw, puis active le service du pare-feu UFW.

ufw allow ssh
ufw enable

Ajoute maintenant les services HTTP et HTTPS.

ufw allow http
ufw allow https

Les ports des services SSH, HTTP et HTTPS ont été ajoutés à la liste des services du pare-feu UFW, vérifie-le à l’aide de la commande ci-dessous.

ufw status

Configurer le pare-feu UFW

Sur CentOS 7.5 – Firewalld

Avant d’ajouter les ports et les services au firewelld, assure-toi que le service firewalld est en marche.

Démarre le service firewalld et active-le pour qu’il se lance chaque fois au démarrage du système.

systemctl start firewalld
systemctl enable firewalld

Remarque :

  • Le service SSH sera activé par défaut dans la liste des services Firewald.

Ajoute maintenant les services HTTP et HTTPS à l’aide de la commande firewall-cmd ci-dessous.

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

Recharge la configuration de firewalld et vérifie la liste des services.

firewall-cmd --reload
firewall-cmd --list-services

Tu verras que les services SSH, HTTP et HTTPS figurent dans la liste.

Configurer Firewalld

Étape 3 – Installe Letsencrypt et génère des certificats

Dans cette étape, nous allons installer l’outil letsencrypt, et générer les certificats SSL forts Letsencrypt à l’aide de la commande cerbot.

Sur Ubuntu 18.04

Installe les paquets letsencrypt à l’aide de la commande apt ci-dessous.

sudo apt install letsencrypt -y

Sur CentOS 7.5

Installe maintenant les paquets letsencrypt sur CentOS 7 à l’aide de la commande yum ci-dessous.

sudo yum install certbot -y

Une fois l’installation terminée, nous allons créer une nouvelle configuration qui sera utilisée pour générer des fichiers de certificats SSL.

Sur Ubuntu 18.04

Va dans le répertoire de configuration ‘/etc/nginx’ et crée un nouveau fichier de configuration ‘cerbot.conf’ dans le répertoire ‘snippets’.

cd /etc/nginx/
vim snippets/certbot.conf

Colle la configuration suivante dans ce fichier.

    location /.well-known {
        alias /var/www/html/.well-known;
    }

Sauvegarde et quitte.

Modifie maintenant le fichier d’hôte virtuel Nginx par défaut.

vim sites-available/default

Ajoute la configuration suivante dans les blocs ‘server {..}’.

    include snippets/certbot.conf;

Sauvegarde et quitte.

Sur CentOS 7.5

Va dans le répertoire de configuration ‘/etc/nginx’ et crée un nouveau fichier de configuration ‘certbot.conf’ dans le répertoire ‘default.d’.

cd /etc/nginx/
vim default.d/certbot.conf

Colle la configuration ci-dessous.

    location /.well-known {
        alias /usr/share/nginx/html/.well-known;
    }

Sauvegarde et quitte.

Maintenant, teste la configuration de nginx et assure-toi qu’il n’y a pas d’erreur, puis redémarre le service nginx.

nginx -t
systemctl restart nginx

Ensuite, génère les certificats SSL letsencrypt à l’aide de la commande certbot.

Sur Ubuntu 18.04

certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /var/www/html -d hakase-labs.io

Sur CentOS 7.5

certbot certonly --rsa-key-size 4096 --webroot --agree-tos --no-eff-email --email [email protected] -w /usr/share/nginx/html -d hakase-labs.io

Remarque :

  • Nous allons spécifier la taille de la clé RSA pour notre domaine à ‘4096’, et nous allons définir la méthode d’authentification au répertoire racine web par défaut ‘/var/www/html’ sur le système Ubuntu, et au répertoire ‘/usr/share/nginx/html’ pour le système CentOS 7.

Crée le certificat SSL de Let's encrypt

Une fois l’opération terminée, tu obtiendras tous les fichiers de certificats SSL pour le nom de domaine dans le répertoire ‘/etc/letsencrypt/live’.

Pour obtenir une sécurité supplémentaire, nous allons générer la clé DHPARAM ‘4096’ en utilisant la commande OpenSSL comme indiqué ci-dessous.

openssl dhparam -out /etc/nginx/dhparam.pem 4096

La clé DHPARAM a été générée dans le répertoire ‘/etc/nginx’.

Étape 4 – Configuration SSL

Dans cette étape, nous allons définir la configuration SSL pour le serveur Web Nginx. Nous allons créer une nouvelle configuration ‘ssl.conf’ qui contient la configuration SSL modifiée et axée sur la sécurité pour le serveur Web Nginx.

Sur Ubuntu 18.04

Va dans le répertoire de configuration ‘/etc/nginx/’ et crée une nouvelle configuration SSL ‘ssl.conf’ dans le répertoire ‘snippets’.

cd /etc/nginx/
vim snippets/ssl.conf

Sur CentOS 7.5

Accède au répertoire de configuration ‘/etc/nginx/’ et crée une nouvelle configuration SSL ‘ssl/conf’ dans le répertoire ‘default.d’.

cd /etc/nginx/
vim default.d/ssl.conf

Colle la configuration SSL suivante à cet endroit.

# Specify the TLS versions
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

# Ciphersuites recommendation from the chiper.li
# Use this chipersuites to get 100 points of the SSLabs test
# Some device will not support
#ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384";

# Mozilla Ciphersuits Recommendation
# Use this for all devices supports
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';

# Use the DHPARAM key and ECDH curve >= 256bit
ssl_ecdh_curve secp384r1;
ssl_dhparam /etc/nginx/dhparam.pem;

server_tokens off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Enable HTTP Strict-Transport-Security
# If you have a subdomain of your site,
# be carefull to use the 'includeSubdomains' options
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

# Enable OSCP Stapling for Nginx web server
# If you're using the SSL from Letsencrypt,
# use the 'chain.pem' certificate
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/hakase-labs.io/chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# XSS Protection for Nginx web server
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header X-Robots-Tag none;

Enregistre et quitte.

Remarque :

  • Spécifie les versions TLS pour le site, n’accepte que les versions TLSv1 TLSv1.1 TLSv1.2.
  • Spécifie la ciphersuite SSL, il est recommandé d’utiliser la ciphersuite SSL de la suggestion Mozilla pour obtenir la compatibilité de tous les appareils.
  • Active le HSTS, l’agrafage OSCP et ajoute la protection XSS.

Étape 5 – Configurer l’hôte virtuel Nginx avec SSL

Dans cette étape, nous allons créer un fichier d’hôte virtuel pour le nom de domaine. Nous allons créer un nouvel hôte virtuel, un domaine nommé hakase-labs.io, et son répertoire racine web sera situé dans le répertoire ‘/var/www/site01’.

Crée le nouveau répertoire ‘/var/www/site01’ et crée le fichier ‘index.html’ à l’intérieur.

mkdir -p /var/www/site01
echo '<h1><center>Nginx - Letsencrypt - A+</center></h1>' > /var/www/site01/index.html

Va maintenant dans le répertoire de configuration ‘/etc/nginx’ et crée un nouveau fichier d’hôte virtuel nommé ‘hakase-labs.io’ pour Ubuntu, et ‘hakase-labs.conf’ pour le système CentOS 7.

Sur Ubuntu 18.04

cd /etc/nginx/
vim sites-available/hakase-labs.io

Sur CentOS 7.5

cd /etc/nginx/
vim conf.d/hakase-labs.conf

Colle l’exemple de configuration d’hôte virtuel Nginx suivant à cet endroit.

server {
    listen 80;
    listen [::]:80;
    server_name hakase-labs.io;

    return 301 https://$host$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        root   /var/www/site01;
        index index.html index.php index.htm;

        server_name  hakase-labs.io;
        error_log /var/log/nginx/hakase-error.log warn;

        ssl_certificate /etc/letsencrypt/live/hakase-labs.io/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hakase-labs.io/privkey.pem;

        #SSL Configuration
        include snippets/ssl.conf;

        location ~ /.well-known {
                allow all;
        }


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


        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

}

Sauvegarde et quitte.

Remarque :

  • Change la ligne ‘include snippets/ssl.conf;’. Si tu utilises Ubuntu, laisse-la par défaut. Et si tu utilises CentOS, change le répertoire en ‘default.d/ssl.conf’.

Uniquement sur le système Ubuntu

Active le nouveau fichier d’hôte virtuel et teste la configuration, et assure-toi qu’il n’y a pas d’erreur.

ln -s /etc/nginx/sites-available/hakase-labs.io /etc/nginx/sites-enabled/
nginx -t

Redémarre maintenant le service nginx.

systemctl restart nginx

Le nouvel hôte virtuel avec le HTTPS activé et une configuration SSL supplémentaire a été créé.

Vérifie à l’aide de la commande netstat et tu verras que le port HTTPS 443 figure dans la liste.

netstat -plntu

Configurer Nginx

Étape 6 – Test

Ouvre ton navigateur Web et tape le nom de ton domaine, le mien est ‘http://hakase-labs.io’.

Teste nginx

Et tu seras redirigé vers la connexion HTTPS.

Va maintenant sur le site de test SSL‘https://www.ssllabs.com/ssltest/‘ et tape ton propre nom de domaine, puis attends les résultats.

Voici le résultat de l’utilisation de la ‘Mozilla Ciphersuite Recommendation’.

Résultat A+ de SSL Labs

Et voici le résultat de l’utilisation de la ‘Recommandation de Ciphersuite Cipher.li’.

Avec la recommandation de Cipher.li Ciphersuite

Tu verras que tous les résultats ont des résultats ‘A+’ et qu’ils ne diffèrent que sur la ‘Force du chiffrement’ des recommandations Mozilla et Cipherli.st.

Pour vérifier l’agrafage OSCP et le HSTS sur le serveur, fais défiler la page des résultats du test et tu obtiendras le résultat comme indiqué ci-dessous.

Empilage OSCP

Si tu veux vérifier l’agrafage OSCP à partir de la ligne de commande, vérifie-le en utilisant la commande suivante.

echo QUIT | openssl s_client -connect hakase-labs.io:443 -status 2> /dev/null | grep -A 17 'OCSP response:' | grep -B 17 'Next Update'

vérifie l'agrafage OSCP à partir de la ligne de commande

Pour le test HSTS, vérifie-le en utilisant la commande curl ci-dessous.

curl -s -D- https://hakase-labs.io | grep -i Strict

Test HSTS

L’installation et la configuration du serveur Web Nginx avec SSL Letsencrypt ainsi que l’obtention du A+ du test SSLabs ont été réalisées avec succès.

Références

Vous aimerez aussi...