[Debian 9] Certificats SSL ECDSA avec Let’s Encrypt pour nginx

Les certificats SSL sont devenus monnaie courante aujourd’hui sur le web – qu’ils soient gratuits ou auto-signés, chaque serveur peut avoir son certificat et ainsi chiffrer la connexion.

Toutefois, pour aller plus loin, il est conseillé d’utiliser des certificats ECDSA, beaucoup plus fiables et surtout plus robustes.
Les certificats ECDSA, pour « Elliptic Curve Digital Signature Algorithm » se basent sur le chiffrement dit « par courbe elliptique ». Le procédé pour calculer le chiffrement est très complexe – je ne vais pas vous le cacher, j’ai vraiment du mal à comprendre la suite logique et arithmétique de ce système… – Voici ce qu’il faut toutefois en retenir :

  • Les paires de clés générées sont plus petites que les clés RSA actuelles
  • Une clé ECDSA de 386bits correspond à une clé RSA de 7680bits (en terme de chiffrement)
  • Il s’agit du chiffrement le plus fort à l’heure actuelle

La création des clés / certificats ECDSA est un peu plus complexe et beaucoup plus longue que les certificats SSL traditionnels, compte-tenu de la robustesse de la méthode. Avant toute chose, vous devez avoir (bien entendu) l’outil Certbot, de Let’s Encrypt pour générer vos certificats.
Pour rappel, les commandes pour obtenir Certbot :

Pour plus d’informations, je vous conseille de lire l’article ci-contre : Certificat SSL Let’s Encrypt pour Nginx – CZS
Une fois l’outil téléchargé et extrait, il faut maintenant créer les dossiers nécessaires pour la création du certificat – pour rappel, remplacez « ndd.fr » par votre nom de domaine :

/!\ Les étapes de génération de paire de clés peuvent prendre plus ou moins de temps selon la puissance de votre machine. Ne vous inquiétez pas si vous voyez pleins de petits points s’afficher sur l’écran !

Dirigez-vous dans le dossier précédemment créé (et non pas dans « letmp ») – il faut créer vos clés de chiffrement dans ce dossier :

  • La première commande « openssl ecparam » génère la paire de clés d’une courbe elliptique de 384bits et d’en créer la clé privée
  • La seconde commande « openssl req -new » génère le certificat SSL depuis votre clé privée

Les clés et le premier certificat SSL sont maintenant créés, le certificat ECDSA Let’s Encrypt peu dès à présent être généré via Certbot :

Une nouvelle fois, n’oubliez pas de remplacer « ndd.fr » par votre nom de domaine, sans quoi votre certificat ne sera pas valide.
La dernière commande (cat …) ajoute une variable dans le fichier « chain.pem », nécessaire pour la génération du certificat.

Le certificat est maintenant prêt à être utilisé sur votre serveur web ! Il faut pour cela configurer votre vhost nginx comme ceci :

Explications

  • Il faut que le serveur web « écoute » sur le port 443 (ou tout autre port, mais par défaut pour le SSL il s’agit du 443) et ait l’option « SSL ». Pour du web moderne et si votre nginx est a été compilé récemment, vous pouvez ajouter l’option « HTTP2 ».
  • Pour écouter sur le SSL en IPv6, il faut décommenter la seconde ligne, à savoir « listen [::]… »
  • Le premier bloc de lignes « ssl_certificate » permet d’indiquer au serveur web quel est le certificat à utiliser pour chiffrer les connexions. Il faut donc aller chercher le bon dossier que nous avons créé précédement dans la procédure.
  • Le second bloc de lignes SSL correspond aux protocoles SSL utilisés pour le chiffrement – Aujourd’hui, les protocoles SSL v1, v2 et v3 sont considérés comme non fiables puisqu’ils sont sujets à être déchiffrables. Il faut donc privilégier les protocoles TLS. Afin d’assurer une compatibilité maximale de votre site web en SSL, il faut laisser tous les protocoles TLS actifs (du 1.0 au 1.2) – Sinon, gardez uniquement le TLSv1.2.
    Les « ciphers » correspondent à tous les algorithmes utilisés pour le chiffrement. Je me suis basé sur les outils et l’aide de @aeris22.
    Il faut spécifier aussi la courbe elliptique utilisée pour votre certificat – dans cette procédure, nous avons utilisé le « secp384r1 ».
  • Enfin, le troisième gros bloc ssl correspond aux optimisations à effectuer pour avoir une connexion chiffrée rapide, avec du « cache » et quelques « tweaks » pour affiner votre configuration. Vous noterez que j’utilise les serveurs DNS de la FDN… 🙂

La configuration d’un certificat ECDSA est assez lourde pour nginx, notamment du fait de toutes les configurations à apporter/effectuer – grâce à cela, vous bénéficierez d’une connexion chiffrée robuste et (pour l’instant) « indéchiffrable ».
Vous devez tester la configuration de votre fichier nginx, pour vous assurer que tout est en bon et due forme :

Si le résultat est « OK », vous pouvez redémarrer votre serveur web nginx pour prendre en compte les dernières modifications !

Pour permettre le renouvellement automatique de votre certificat, il faut utiliser une nouvelle fois la commande certbot-auto, à mettre dans une tâche cron.

Il faut aussi effectuer un « reload » d’nginx pour que la configuration (et la mise à jour) soit donc prise en compte.

Enfin, pour vous assurer du bon fonctionnement, vous pouvez utiliser ces deux sites web :

Article basé sur l’article de Nicolas SIMOND – Abyss Project.

Pour avoir des informations complémentaire sur le chiffrement, je vous suggère cette adresse – imirhil.

Julien H

Passionné depuis toujours par l'informatique, je transforme ma passion en expertise. J'utilise quotidiennement les outils et systèmes Microsoft. Je ne délaisse pas mon côté ouvert, notamment via l'utilisation des OS Debian et Archlinux. L'infosec m'ouvre les yeux sur les enjeux actuels et futurs de l'IT.

3 Comments

    1. Hello,
      Le moyen le plus simple est de mettre en place un script .sh qui sera appelé par une tâche CRON ! L’article sera mis à jour dans la soirée pour prendre en compte cette modification 😉

  1. Hello,

    merci pour le tutoriel, mais je n’y arrive absolument pas, pire j’ai mis mon site down…
    je ne serai pas contre une petite aide ^^

    En gros j’avais un certificat SSL qui arrive a terme, je me suis dis, je vais créer un nouveau avec ce tutoriel en ECDSA.

    Seulement message d’erreur apres execution « /opt/certbot/certbot-auto certonly …. »
    Domain: backoldgxxxxxxxx (j’ai bien mis mon domaine complet en .com)
    Type: unauthorized
    Detail: Invalid response from
    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address.

    Du coup je me dis ok, je vais mettre le AAAA dans la config de mon nom de domaine, et j’ignore mon IPV6.. un petit coup de ifconfig et je récupère mon inet6,
    je fais le AAAA et ca foire.
    Domain: backoldxxxxxx
    Type: connection
    Detail: Fetching
    https://www.backoldxxxx/.well-known/acme-challenge/WbfCeZTae0hIVzyMc2_ntnE94Bj19HM8rCRVYi2zX84:
    Error getting validation data
    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.

    Pire j’ai du retire le AAAA de ma configuration du nom de domaine, mon site étant devenu inaccessible, et la j’attend que petit a petit les DNS se reduplique sans le AAAA.

    Voila je ne sais pas comment faire.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Close
Close