Comment configurer le cryptage SSL de bout en bout avec CloudFlare

La configuration d’un SSL pour n’importe quel site web représente un défi. Les visiteurs du site, les navigateurs et les moteurs de recherche récompensent un site web correctement sécurisé avec une couche Secure Sockets Layer (SSL). Auparavant, ce processus impliquait l’achat, l’installation et la configuration d’un certificat SSL. Cependant, avec Cloudflare SSL, vous pouvez accomplir le processus de configuration SSL en seulement quelques clics!

Dans cet article, vous apprendrez comment configurer votre site avec le chiffrement SSL via Cloudflare. Ainsi, progressez vers des connexions SSL chiffrées de bout en bout!

Prérequis

Pour suivre ce tutoriel, quelques prérequis sont nécessaires ci-dessous :

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • Un serveur Ubuntu Linux avec NGINX installé et configuré. Ce tutoriel démontre l’utilisation de Linux et de NGINX, mais le même processus général fonctionne également pour IIS ou Apache.

Mise en place de Cloudflare Universal SSL : seulement le début

Il existe plusieurs façons de configurer un SSL avec Cloudflare. Souvent, la méthode la plus rapide est d’opter pour le SSL Universel. Pourquoi ? Avec SSL Universel, au lieu de rechercher et d’acheter un certificat SSL, Cloudflare provisionne un certificat, puis tout le trafic envoyé via Cloudflare utilisera ce certificat.

Après avoir activé SSL Universel, Cloudflare présente un certificat SSL valide aux visiteurs et aux moteurs de recherche. Cloudflare ne nécessite également pas de configurer le serveur ou le site Web pour utiliser ce certificat, c’est astucieux !

1. Ouvrez votre navigateur Web et connectez-vous au tableau de bord Cloudflare.

2. Accédez à votre site à partir de la liste de domaines du compte, comme indiqué ci-dessous.

Choose the site to change options for.

3. Maintenant, cliquez sur SSL/TLS pour voir les options de cryptage de votre site.

The SSL/TLS Encryption mode page

4. Choisissez l’option Flexible pour activer SSL Universel. Une fois sélectionné, le changement prend effet immédiatement. Votre site est maintenant crypté entre le navigateur et Cloudflare !

Enabling Universal SSL on Cloudflare

Configuration du cryptage SSL de bout en bout complet

Bien que SSL Universel soit une excellente option pour commencer à sécuriser les sites, il laisse le trafic entre le serveur et Cloudflare non sécurisé. Heureusement, il existe deux modes de cryptage pour crypter le trafic de Cloudflare vers le serveur, le cryptage complet et le cryptage complet (strict), chacun ayant principalement des exigences d’installation de certification différentes.

  • Complet – Nécessite un certificat sur le serveur, mais cela peut être un certificat auto-signé.
  • Full (strict) – Le certificat côté serveur installé doit être un certificat valide.

Passons en revue la différence entre ces chiffrements et comment les configurer.

Configuration de l’encryption SSL/TLS complète avec un certificat auto-signé

Contrairement à Universal SSL, l’encryption SSL/TLS complète nécessite que votre serveur web serve correctement un certificat SSL pour chiffrer le trafic du serveur vers Cloudflare. Il existe de nombreuses façons de le faire, mais ce tutoriel présente les étapes sur un serveur Linux avec NGINX.

Génération d’un certificat auto-signé

Pour chiffrer la connexion entre Cloudflare et votre serveur d’origine, vous avez besoin d’un certificat SSL. Étant donné que le mode d’encryption SSL/TLS complet ne nécessite pas que le certificat soit entièrement approuvé, vous pouvez utiliser un certificat auto-signé pour démarrer rapidement.

1. Connexion sécurisée (SSH) à votre serveur web Linux.

2. Changez (cd) vers le répertoire SSL standard d’Ubuntu (/etc/ssl) en exécutant la commande suivante. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Maintenant, générez à la fois les clés publique et privée pour votre site avec la commande openssl. Pour ce faire, exécutez la commande openssl ci-dessous.

Cette commande accomplit quelques choses :

  • Demande (req) un certificat X.509 fourni par le paramètre -x509.
  • Quand référencé par NGINX, permet à NGINX de lire le certificat au démarrage en utilisant le paramètre -nodes.
  • Spécifie le nombre de jours pendant lesquels le certificat est valide.
  • Crée une nouvelle clé publique et privée avec -newkey via un chiffrement RSA de 2048 bits (rsa:2048).
  • Sauvegarde la clé privée dans /etc/ssl/private/nginx-selfsigned.key avec le paramètre -keyout.
  • Sauvegarde la clé publique dans /etc/ssl/certs/nginx-selfsigned.crt en utilisant le paramètre -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Si openssl renvoie une erreur bénigne de Can't load /root/.rnd into RNG, vous devrez commenter la ligne #RANDFILE = $ENV::HOME/.rnd dans /etc/ssl/openssl.cnf. Toutes les versions modernes d’openssl utilisent le périphérique système /dev/urandom pour les données d’entropie aléatoire et n’ont pas besoin d’un fichier spécifique pour l’initialisation.

4. Après avoir exécuté la commande avec succès, openssl vous demandera quelques informations. Ci-dessous, vous trouverez toutes les valeurs fournies pour ce tutoriel.

  • Nom du pays : US
  • Nom de l’État ou de la Province : Illinois
  • Nom de la Localité : Bloomington
  • Nom de l’Organisation : Test Company, LLC
  • Nom de l’Unité Organisationnelle : <vide>
  • Nom Commun : test.adamlistek.me
  • Adresse e-mail : [email protected]
Generating a self-signed certificate

5. Enfin, vérifiez que le certificat existe en utilisant la commande test. Si la commande test renvoie (echo $?) 0, alors le fichier existe comme prévu. Vous pouvez voir dans la capture d’écran suivante que chaque commande a renvoyé une valeur de 0.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Configuration de NGINX

Maintenant que le certificat a été généré et stocké dans les emplacements clés /etc/ssl/certs et /etc/ssl/private, NGINX doit être configuré pour appliquer le certificat et servir le contenu du site.

Les configurations de site NGINX sont définies dans des blocs server qui sont généralement contenus dans des fichiers hôtes virtuels. Dans l’exemple ci-dessous, la configuration de site de base est stockée dans le fichier test.adamlistek.me.conf et incluse dans le fichier nginx.conf principal.

1. Tout d’abord, créez un nouveau fichier hôte virtuel avec le nom de votre choix, mais pour cet exemple, nommez-le test.adamlistek.me.conf sous le répertoire /etc/nginx/vhosts.d. Ensuite, copiez le contenu ci-dessous dans le fichier hôte virtuel et enregistrez-le.

Remplacez le nom de domaine test.adamlistek.me par le vôtre, car il s’agit uniquement à des fins de démonstration. Et si le /etc/nginx/vhosts.d emplacement n’existe pas, créez le répertoire en exécutant mkdir /etc/nginx/vhosts.d.

server {
   # Écoutez sur le port 80 pour IPv4 et IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Effectuez une redirection 301 avec tous les paramètres vers le bloc serveur SSL ci-dessous
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Écoutez sur le port 443 pour IPv4 et IPv6 avec HTTP2 activé (nécessite SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # L'emplacement du certificat public et privé
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # L'emplacement des fichiers web à charger, c'est l'emplacement NGINX par défaut
   root /usr/share/nginx/html;
 # Le fichier par défaut à servir lors d'une demande de domaine racine
   index index.html;
 }

2. Vérifiez que votre fichier de configuration principal NGINX, /etc/nginx/nginx.conf, contient la ligne include nécessaire dans le bloc http, situé à la fin du bloc.

# Les configurations du serveur vont ici
 …
 http {
     # Les configurations supplémentaires vont ici# Inclure les hôtes virtuels
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Redémarrez NGINX avec la commande suivante si vous utilisez systemd, qui est un gestionnaire de système et de service moderne pour Linux.

service nginx restart

4. Revenez à Cloudflare, vérifiez que le certificat auto-signé fonctionne. Pour ce faire, désactivez le « nuage orange » pour l’enregistrement DNS sous État du proxy, comme indiqué ci-dessous. La désactivation de l’option « nuage orange » contourne Cloudflare et sert les requêtes directement depuis le serveur web.

Disabling Cloudflare proxying via Proxy Status.

5. Assurez-vous que le site renvoie le certificat auto-signé nouvellement créé en accédant au site via votre navigateur web. Cela entraînera une page d’avertissement, comme indiqué ci-dessous.

Displaying the self-signed certificate error.

6. Enfin, activez le chiffrement complet TLS/SSL sur Cloudflare. Pour ce faire, réactivez le statut de proxy Cloudflare « orange-cloud » sur l’enregistrement DNS que vous avez précédemment désactivé. Ensuite, accédez à l’onglet SSL/TLS et cliquez sur le bouton radio Full comme indiqué ci-dessous.

Enabling Full SSL/TLS encryption on Cloudflare.

Génération de certificats d’origine pour un chiffrement SSL/TLS complet (strict)

Le mode de chiffrement complet ne garantit pas que le certificat présenté par le serveur Web a une chaîne de certificats réellement valide. Optez plutôt pour un chiffrement non strict, et Cloudflare acceptera n’importe quel certificat présenté par le serveur.

Cloudflare offre la possibilité de générer un certificat TLS gratuit pour sécuriser la connexion à votre serveur d’origine. Cependant, il y a deux inconvénients à utiliser un certificat d’origine fourni par Cloudflare. L’un est que vous devez générer et installer le certificat manuellement. Le deuxième est que le certificat ressemble à un certificat auto-signé que tout navigateur ne ferait pas confiance autre que Cloudflare.

Il est possible d’automatiser la génération de certificats en utilisant l’API de création de certificats Origin CA, mais cela dépasse le cadre de ce tutoriel.

1. Accédez au serveur d’origine en allant dans l’onglet SSL/TLS -> Original Server, comme indiqué ci-dessous, et cliquez sur le bouton Create Certificate.

Navigating to the Origin Server page.

2. Comme vous pouvez le voir ci-dessous, les options par défaut sont déjà configurées pour générer un certificat générique pour le domaine avec une validité de 15 ans—super ! Donc, laissez les options par défaut et générez le certificat en cliquant sur le bouton Create en bas à droite de la page.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Ajoutez le certificat nouvellement créé à votre système Linux en enregistrant d’abord les clés privée et publique avec l’éditeur de texte GNU nano. Comme il y a deux clés à enregistrer, vous devrez enregistrer les fichiers de clés un par un.

Assurez-vous d’enregistrer la clé privée car elle n’est disponible qu’au moment où vous avez généré un certificat d’origine. Si vous perdez accidentellement cette clé, révoquez le certificat et réémettez un nouveau certificat.

Ouvrez un terminal, puis créez et ouvrez le fichier de clé publique (nginx-test.adamlistek.me.crt) dans nano en exécutant la première commande ci-dessous.

Ensuite, revenez à Cloudflare et copiez la clé Origin Certificate (clé publique) en cliquant sur l’option Click to copy, comme indiqué ci-dessous. Ensuite, collez (Ctrl+U) la clé publique que vous avez copiée dans le fichier de clé publique ouvert dans nano. Enregistrez les modifications (Ctrl+O) et quittez (Ctrl+X) nano.

Après avoir enregistré le fichier de clé publique, répétez le même processus pour créer le fichier de clé, copier la clé depuis Cloudfare et l’enregistrer dans le fichier de clé. Mais cette fois, vous créez le fichier de clé privée (nginx-test.adamlistek.me.key).

# La clé publique, sous la section Certificat d'origine
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# La clé privée, sous la section du même nom
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Maintenant que vous avez créé les clés publique et privée, pointez NGINX vers l’emplacement des certificats. Faites-le en modifiant le fichier de configuration test.adamlistek.me.conf avec les lignes ci-dessous, modifiées pour prendre en charge votre domaine.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Pour appliquer les nouveaux certificats, redémarrez NGINX avec la commande suivante.

service nginx restart

6. Retournez maintenant à l’onglet SSL/TLS dans Cloudflare, mettez à jour le mode de chiffrement SSL/TLS en cliquant sur Complet (strict), comme vous le voyez ci-dessous.

Setting the Encryption mode to Full (strict).

Activation du chiffrement SSL/TLS complet (strict) avec LetsEncrypt

Le plus grand inconvénient de l’utilisation d’un certificat d’origine Cloudflare est qu’il est uniquement approuvé par Cloudflare. Supposons que vous ayez besoin d’un certificat entièrement approuvé par le navigateur, soit en tant que solution de secours, soit pour un contrôle supplémentaire. Dans ce cas, LetsEncrypt offre la possibilité de générer un certificat approprié.

Bien que vous puissiez utiliser n’importe quel certificat valide, LetsEncrypt est un choix courant pour générer un certificat valide. Il existe plusieurs clients LetsEncrypt disponibles, mais ce tutoriel démontre le client acme.sh.

Étant donné que vous êtes déjà sur Cloudflare, l’une des meilleures méthodes de provisionnement DNS avec LetsEncrypt est via l’option DNS.

1. Tout d’abord, ouvrez votre terminal et installez acme.sh via la commande curl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. Ensuite, créez ou modifiez le fichier account.conf situé dans le répertoire d’installation pour ajouter les clés d’API Cloudflare enregistrées. Ces clés peuvent être trouvées dans la section Profil —> Jetons API du tableau de bord Cloudflare.

Bien que vous puissiez créer un jeton spécifique avec des autorisations limitées, à des fins de ce tutoriel, utilisez plutôt la Clé API Globale, comme illustré ci-dessous.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Générez le certificat via la commande suivante. Notez que la commande ci-dessous indique au client acme.sh d’utiliser Cloudflare (dns_cf) pour vérifier (--dns) la propriété du certificat. Ensuite, elle définit le temps d’attente (--dnsslep) à 20 secondes avant d’émettre (--issue) le certificat pour le domaine (-d) test.adamlistek.me.

Lorsque la commande est terminée, ci-dessous, vous verrez les chemins où vous pouvez trouver votre certificat, la clé du certificat, le certificat intermédiaire CA et le certificat de chaîne complète.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Comme précédemment, modifiez la configuration du site NGINX pour changer l’emplacement des ssl_certificate et ssl_certificate_key. Assurez-vous de remplacer /home/user par l’emplacement de votre installation acme.sh.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Appliquez la nouvelle configuration en redémarrant NGINX avec la commande suivante.

service nginx restart

6. Enfin, mettez à jour le mode d’encryption SSL/TLS de Cloudflare en allant dans l’onglet SSL/TLS, puis cliquez sur Complet (strict).

Setting the Encryption mode to Full (strict).

Conclusion

Tout au long de ce tutoriel, vous avez appris comment sécuriser votre site avec les différentes options SSL/TLS fournies par Cloudflare. Ajouter LetsEncrypt à votre configuration SSL Cloudflare ajoute une option de certificat d’origine flexible et gérée par l’utilisateur également !

Avec la connaissance des différentes options pour sécuriser la connexion au visiteur du site, allez-vous progresser vers une connexion entièrement sécurisée à votre serveur avec Cloudflare SSL ?

Source:
https://adamtheautomator.com/cloudflare-ssl/