Chez oim, forum libreChez oim, forum libre

 


Pages: [1]   En bas

Auteur Sujet: Tuto : Certificats SSL wildcard sous Windows ou Linux avec acme.sh et Cloudflare  (Lu 75 fois)

alex

  • Administrateur
  • Dictionnaire ambulant
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 17.383
  • Proprio officiel chez oim !

     



Tuto, LetsEncrypt : Obtenir un certificat de sécurité Wildcard sous Windows ou Linux avec acme.sh et CloudFlare





Mise à jour : 07 novembre 2018
Un exemple pour un autre système de gestion de serveur a été ajouté. Il s'agit de ISPConfig qui, théoriquement, n'a pas besoin de CloudFlare.





Introduction
Utilisateurs Windows, installer Cygwin
Utilisateurs Windows, installer les paquets requis par acme.sh
Confier la gestion de notre domaine à CloudFlare
Obtenir la clé API de notre compte CloudFlare
Installer acme.sh
Préparons maintenant le fichier API de Cloudflare
Obtenir un certificat wildcard "classique" à base de clés RSA
Obtenir un certificat wildcard à base de clés ECDSA
Renouvellement du certificat
Révoquer le certificat
Avantages et inconvénients des clés RSA et ECDSA

Comment utiliser une autre API que celle de Cloudflare ? Exemple avec ISPConfig




(Haut de Page)
- Introduction


Dans ce nouveau tuto dédié aux certificats de sécurité, nous allons nous pencher sur l'obtention d'un certificat de sécurité wildcard à l'aide de l'utilitaire acme.sh et les serveurs DNS de Cloudflare.
Acme.sh est un utilitaire Bash permettant d'obtenir des certificats SSL qui a l'énorme avantage de proposer des dizaines d'API DNS prévues pour les principaux registrars (OVH, Gandhi, GoDaddy, etc.), gestionnaires serveurs et hébergeurs. Plus de 50 API sont au programme à l'heure où j'écris et d'autres sont en préparation, c'est donc le diable si vous ne trouvez pas la votre !
Dans l'éventualité où vous ne trouveriez pas l'API adéquate, nous utiliserons les serveurs DNS de Cloudflare, avec un compte gratuit, auxquels il faudra confier la gestion du domaine pour lequel nous souhaitons un certificat.
Pas de panique ! Il ne s'agit pas de transférer votre domaine vers CloudFlare, mais juste lui confier la gestion du domaine, ce qui est une manœuvre réversible.

Cette fois, c'est un certificat wildcard que nous allons créer. Un certificat wildcard est prévu pour un nombre illimité de sous domaines, même si ils n'existent pas à la création du certificat.
Un certificat wildcard utilise le caractère générique, ou wildcard en anglais, pour couvrir tous les sous domaines. Ce caractère générique ou wildcard est tout simplement l'astérisque ( * ).
Exemple :
Domaine : example.com
Sous domaines : *.example.com


Pour ce faire, nous utiliserons donc le petit utilitaire acme.sh qui est d'une utilisation très simple.
Les utilisateurs Windows devront installer Cygwin afin de pouvoir émuler une espèce de Linux sur leur ordinateur (un bash plus précisément). Pas de panique, ce tuto vous aidera à installer Cygwin.
Quant aux utilisateurs Linux, vous n'aurez quasiment rien à faire, si ce n'est installer acme.sh.

Cerise sur le gâteau, pour les curieux ou paranos de la sécurité, nous demanderons 2 types de certificat.
Nous demanderons d'abord un certificat "classique" à base de clés RSA.
Ensuite, nous demanderons un certificat à base de clés ECDSA s'appuyant sur les courbes elliptiques. Vous verrez que ce type de clé est très robuste malgré une très petite longueur de clé (comparé à RSA).




(Haut de Page)
- Utilisateurs Windows, installer Cygwin


Sous Windows, nous n'avons pas le choix, il nous faut installer un émulateur bash. Un émulateur bash est tout simplement un programme qui imite le fonctionnement de la ligne de commande Linux. Vous aurez un écran noir qui attend vos ordres, comme dans une fenêtre de ligne de commande MS-DOS.
Pour info, la ligne de commande s'appelle console.
Pour imiter (émuler) la console Linux, nous allons donc installer Cygwin.

Commençons de suite, téléchargeons Cygwin ! (Vous placerez votre téléchargement sur le bureau, il ne va pas y rester longtemps)
Si vous avez un Windows 64bit, c'est ici : https://cygwin.com/setup-x86_64.exe
Si vous avez un Windows 32bit, c'est ici : https://cygwin.com/setup-x86.exe

C'est tout, vous avez tout ce qu'il faut !
Maintenant, nous allons créer le dossier de Cygwin afin qu'il soit utilisable sans souci.
Sur votre disque C:, créez un dossier C:\cygwin.
Ensuite, créez un dossier C:\cygwin\_install ou allez dans le dossier C:\cygwin. et créez le dossier \_install.
Dans ce dossier C:\cygwin\_install, placez le programme téléchargé précédemment.
Je vous conseille vivement de créer un raccourci sur votre bureau vers ce programe (clic droit + envoyer vers le bureau). Vous en aurez besoin très souvent !

Vous êtes prêt ? Les chemins sont créés et le programme d'installation Cygwin est placé où il faut ? Allons-y !
Double cliquez sur le raccourci que vous avez créé sur le bureau ou rendez-vous dans C:\cygwin\_install et ouvrez le programme présent. Ah je vous ai prévenu ! Il est préférable de placer un raccourci sur le bureau. C'est la première fois que vous utilisez le programme d'installation, mise à jour, suppression de Cygwin, mais ce n'est certainement pas la dernière !


Une fenêtre va s'afficher à vous, Cliquez sur suivant. :



Là, sélectionnez "Install from Internet" et cliquez sur suivant.



Maintenant, faites attention. choisissez le dossier de Cygwin, c'est à dire le dossier de votre Linux émulé. Ce dossier sera C:\cygwin que vous avez déjà créé. Cliquez sur suivant.



Ensuite, sélectionnez le dossier contenant le programme d'installation de Cygwin. Pour nous, ce dossier est C:\cygwin\_install et on clique sur suivant.
Ne vous inquiétez pas, vos choix seront mémorisés. La prochaine fois, les champs seront déjà pré-remplis.




La fenêtre qui suit peut être ignorée dans la plupart des cas. Cliquez sur suivant.





Le sérieux commence !
(Haut de Page)
- Utilisateurs Windows, installer les paquets requis par acme.sh


Si vous commencez le tuto ici, lancez le programme d'installation de Cygwin. Vous avez normalement créé un raccourci sur le bureau. Avancez jusqu'à la fenêtre de sélection de proxy.
Pour les autres, ceux qui ont commencé à installer Cygwin, on continue.

Il va vous être demandé de choisir un serveur de téléchargement pour les paquets que vous voudrez installer et les mises à jour.
Choisissez le serveur FTP le plus proche de chez vous. A Marseille, le plus proche est l'Allemagne...
Votre choix sera mémorisé. Lors de votre prochaine visite du programme d'installation de Cygwin, les chemins et serveurs seront déjà affichés.




Enfin, nous arrivons sur la fenêtre d'installation des paquets Cygwin !
Sélectionnez la vue "Not installed" et commençons notre choix des paquets nécessaires à Cygwin.
Dans le champs "Search", entrez "Curl". Sur la liste qui s'affiche, choisissez la catégorie "Net" et cliquez sur la version jusqu'à ce que la version la plus haute possible s'affiche.
Recommencez en cherchant le paquet "Socat" dans la catégorie "Net, Utils".
Encore un dernier paquet. Cherchez "Cron" dans la catégorie "Admin", c'est le paquet "Cron: Vixie's cron" qui s'affichera.
Pour tous ces paquets, sélectionnez la dernière version en cliquant sur les versions proposées dans la colonne de gauche.
Une fois terminé avec tous les paquets à installer, cliquez sur "suivant".




Cygwin va installer les paquets souhaités et il vous affichera une dernière fenêtre.
Créez au moins une icône sur le bureau. C'est cette icône qui vous permettra de lancer Cygwin.




Vous devriez donc avoir 2 icônes sur le bureau.
Une icône vous permettant de lancer le programme d'installation/mise à jour de Cygwin et une autre vous permettant de lancer Cygwin (vous pouvez essayer cette seconde icône, une fenêtre Linux s'ouvrira).




Dorénavant, lorsque vous cliquerez sur l'icône d'installation, des mises à jour vous seront proposées si elles existent. Installez toujours ces mises à jour.





(Haut de Page)
- Confier la gestion de notre domaine à CloudFlare


Maintenant, il va falloir que nous utilisions des DNS pour lesquels acme.sh propose une API. Nous allons donc utiliser les DNS de Cloudflare.
Encore une fois, ne vous inquiétez pas, il ne s'agira pas de transférer votre domaine à CloudFlare, vous en resterez propriétaire. Nous utiliserons simplement leurs serveurs DNS, c'est tout.
Rendez-vous sur la page d'accueil de Cloudflare, https://www.cloudflare.com/fr-fr/. Créez un compte si vous n'en possédez pas, sinon connectez vous.

Ensuite, cliquez simplement en haut à droite de la fenêtre sur Add site :




Dans la fenêtre qui se présente à vous, entrez votre domaine et validez :




Cloudflare devrait vous indiquer qu'il va récupérer les enregistrements DNS de votre domaine et vous pouvez passer à la suite :



Sur la fenêtre qui suit, sélectionnez le plan gratuit et confirmez.

La fenêtre suivante vous indiquera les enregistrements DNS que Cloudflare a réussi à récupérer.
Observez attentivement cette page et notez les enregistrements que vous devrez recréer.
Vous pouvez recréer immédiatement les enregistrements manquants en utilisant le champ en haut de page (2).



ATTENTION, SOYEZ VIGILANT !
Lorsque vous créez vos enregistrements, et sur ceux récupérés, un petit nuage et une flèche apparaissent à droite (1 & 3) :
Cliquez sur ces nuages pour qu'ils s'affichent avec la flèche qui contourne le nuage :

Si ce n'est pas fait, toutes vos données transiteront par les serveurs de Cloudflare qui se comportera comme un proxy entre vous, vos visiteurs et votre site.
Ici, nous voulons simplement un service DNS, c'est tout, pas toute la panoplie d'outils d'espionnage fournis gracieusement par Cloudflare. Il aura déjà toutes les requêtes DNS à se mettre sous la dent, ça suffit largement !



C'est terminé ? Alors validez.
Maintenant, Cloudflare va vous demander de changer les serveurs DNS de votre domaine pour les remplacer par les siens.




Cette étape est propre à chaque registrar. Rendez-vous dans votre espace client chez votre registrar et modifier les DNS par ceux indiqués par Cloudflare. Si votre registrar n'a pas prévu la possibilité de désactiver/activer ou restaurer les DNS par défaut, notez les dans un coin où ils ne seront pas perdus.

Par exemple, chez Freenom avec un domaine gratuit, cela se présente tout bêtement.




Une fois que c'est fait, continuez.
C'est maintenant l'étape la plus longue. Cloudflare va s'assurer que les DNS ont correctement été changés.
Tant que la propagation DNS ne sera pas complète, ou en partie, vous ne pourrez pas aller plus loin.
Vous pouvez revérifier cette propagation aussi souvent que vous le souhaitez.




Ca y est, c'est bon ? Cloudflare à la main sur votre domaine ? Continuons !
Maintenant, cliquez sur Home, sélectionnez votre domaine (ou site), en haut de page puis cliquez sur le bouton Overview.




Sur la page affichée, vous verrez que Cloudflare active par défaut 2 services qui sont totalement inutiles.




Cliquez sur le Medium de Security level et sélectionnez Essentially off.



Puis, revenez au début en cliquant le bouton Overview ou re-sélectionnez votre domaine.
Maintenant, cliquez sur le Full de SSL et sélectionnez OFF.




Revenez au début en cliquant le bouton Overview.
Votre domaine se présente comme sur l'image ci-dessous ?




Tout est ok ? Ouf, le plus emmerdant est fait !
Il ne reste plus qu'à récupérer la clé API de votre domaine.




(Haut de Page)
- Obtenir la clé API de notre compte CloudFlare


Le temps de récupérer notre clé API pour pouvoir utiliser acme.sh et nous en aurons terminé avec ce foutu Cloudflare.

Sélectionnez n'importe quel domaine en haut de la page Cloudflare et cliquez sur le bouton Overview.




Là, cliquez sur le lien Get your API key.




A présent, en bas de page, cliquez sur View de la ligne Global API key.




Votre mot de passe vous sera demandé et il vous faudra résoudre le captcha de Google. Enfin, validez.




Et enfin, la voilà ! Votre clé API s'affiche.



Copiez/collez cette clé dans un endroit sûr, nous allons la réutiliser avec acme.sh
ATTENTION ! Cette clé API est aussi secrète qu'un mot de passe. Elle permet un accès complet à votre ou vos domaines !




(Haut de Page)
- Installer acme.sh


Pour les utilisateurs Windows, lancez Cygwin.
Les utilisateurs Linux ouvriront la console.

Installer acme.sh est relativement simple. Il est recommandé d'avoir les permissions root mais ce n'est pas nécessaire.
Si vous utilisez Cygwin, rassurez-vous, vous n'êtes pas concerné par les permissions de groupes.

Avec les permissions root, le dossier /root sera utilisé. Sinon, il s'agira de votre dossier utilisateur ~ ($HOME).
Entrez donc
Code
cd /root
ou
Code
cd ~
Selon les permissions que vous possédez.


Pour installer simplement acme.sh, les utilisateurs Cygwin et Linux entreront :
Code
curl https://get.acme.sh | sh
Sous Linux, vous pouvez également utiliser Wget ou avec Cygwin après avoir installé Wget depuis le programme d'installation/mise à jour :
Code
wget -O -  https://get.acme.sh | sh

Et voilà, acme.sh est installé ! Simple, non ?
Essayez donc :
Code
acme.sh
Vous devriez obtenir l'aide de acme.sh à l'écran.
Sinon, si l'exécution du script refuse de se lancer, entrez ce qui suit et retentez :
Code
chmod +x .acme.sh

Votre installation de acme.sh a créé 3 choses :
  • Une copie de acme.sh dans le dossier ~ ou /root (c'est un fichier caché)
  • La création d'un alias acme.sh dans le dossier ~/.acme.sh/ ou /root/.acme.sh/
  • La création d'une tâche cron permettant de renouveler vos certificats existants automatiquement.

Pour mettre à jour acme.sh, vous entrerez :
Code
acme.sh --upgrade
Ou pour que acme.sh se maintienne automatiquement à jour :
Code
acme.sh --upgrade --auto-upgrade




(Haut de Page)
- Préparons maintenant le fichier API de Cloudflare


Ouvrez en édition, le fichier ./.acme.sh/dnsapi/dns_cf.sh

Le début du fichier ressemble à ceci :
Code
#!/usr/bin/bash

#
#CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
#
#CF_Email="xxxx@sss.com"
Retirez les commentaires (#) devant les lignes CF_KEY et CF_Email.
Ensuite, remplacez le contenu entre guillemets par votre clé API et votre E-mail de compte Cloudflare.

Vous obtiendrez quelque chose de similaire à ceci :
Code
#!/usr/bin/bash

#
CF_Key="46dfqdf465qf456qsf4qsd87"
#
CF_Email="mon_email@example.com"
Lors de l'exécution de acme.sh avec l'API Cloudflare, ces paramètres seront exportés vers le fichier ./.acme.sh/account.conf
De cette façon, si une mise à jour venait à réinitialiser ce fichier, vos paramètres ne seront pas perdus pour acme.sh qui pourra les réutiliser pour les renouvellements ou un nouveau certificat utilisant cette même API.




(Haut de Page)
- Obtenir un certificat wildcard "classique" à base de clés RSA


Obtenir un certificat wildcard à base de clés RSA est tout aussi simple que d'installer acme.sh

Pour obtenir un certificat wildcard pour le domaine example.com, nous entrerons :
Code
acme.sh --issue -d example.com -d *.example.com --dns dns_cf
Le paramètre --dns dns_cf demande une validation DNS en utilisant l'API de Cloudflare.

Vous verrez que acme.sh crée 2 enregistrements DNS TXT pour votre domaine et qu'il attend ensuite 2 minutes le temps de la propagation DNS.
Ensuite, Lets Encrypt lira ces enregistrements pour validation, acme.sh les supprimera et vous obtiendrez votre certificat !

Votre certificat, le certificat intermédiaire (le bunddle) et sa clé se trouveront dans le dossier ./.acme.sh/example.com/
Ne supprimez rien dans ce dossier ! acme.sh à besoin du contenu de ce dossier pour les renouvellements automatiques.




(Haut de Page)
- Obtenir un certificat wildcard à base de clés ECDSA


Un autre type de certificat est disponible avec acme.sh et Lets Encrypt.
Il s'agit des certificats à base de clés ECDSA s'appuyant sur les courbes elliptiques. Malgré une faible longueur, ces clés sont très robustes.

Lets Encrypt reconnait les courbes elliptiques P-256 et P-384. Le P-521 n'est pas encore reconnu.

Nous procéderons de la sorte pour obtenir un certificat Wildcard utilisant ce type de clé :
Code
acme.sh --issue -d example.com -d *.example.com --keylength ec-384 --dns dns_cf

Afin de différencier RSA et ECDSA, votre certificat se trouvera dans le dossier ./.acme.sh/example.com_ecc/




(Haut de Page)
- Renouvellement du certificat


Si vos renouvellements ne se font pas automatiquement, vous pouvez le faire manuellement, toujours très simplement.
Prenons l'exemple avec notre domaine example.com :
Code
acme.sh --renew -d example.com
Vous pouvez forcer le renouvellement si la validité restante du certificat est supérieure à 30 jours :
Code
acme.sh --renew -d example.com --force
Pour les certificats à clés ECDSA, le renouvellement sera sous cette forme :
Code
acme.sh --renew -d example.com --ecc
Ou en forçant le renouvellement :
Code
acme.sh --renew -d example.com --force --ecc
Vous aurez remarqué qu'il n'est pas utile d'indiquer tous les domaines et sous domaines. Seul le premier domaine indiqué à la création du certificat, le domaine que acme.sh utilise pour nommer les dossiers et fichiers, est nécessaire.



(Haut de Page)
- Revoquer le certificat


Révoquer un certificat restera tout aussi simple, vous l'aurez compris :
Code
acme.sh --revoke -d example.com
Ou, si à base de clés ECDSA :
Code
acme.sh --revoke -d example.com --ecc




(Haut de Page)
- Avantages et inconvénients des clés RSA et ECDSA


- Les clés RSA sont connues de quasiment tout le monde et simples à manipuler.
- Elles sont prises en charge par tous les softs utilisant la cryptographie.

- Malheureusement, le temps passant, il est nécessaire de générer des clés de plus en plus longues.
- La longueur des clés RSA n'est pas sans retentissement sur les performances d'un système.


- Les clés ECDSA sont très courtes (comparé à RSA) et sont pourtant très robustes, bien plus robustes que RSA.
Pour comparaison, une clé ECDSA 256 bit est équivalente à une clé RSA 3072 bit, et une clé ECDSA 384 bit est équivalente à une clé RSA 7680 bit !
- Tout comme RSA, la longueur des clés ECDSA évolue. Mais cette évolution est bien moins importante que RSA. Il semblerait donc que RSA n'ait pas un très grand avenir comparé à ECDSA qui pourrait être la solution.

- Le plus gros problème des clés ECDSA est qu'elles ne sont pas prises en charge par des softs anciens ayant court sur de nombreux systèmes comme Postfix et Dovecot, ce qui est un gros problème...




(Haut de Page)
- Comment utiliser une autre API que celle de Cloudflare ?


C'est toujours très simple. Vous l'avez compris, acme.sh est très simple d'utilisation.

Imaginons que vous avez un serveur géré par ISPConfig.
Sur ce serveur, vous avez installé votre propre DNS et vous n'avez pas besoin de Cloudflare.

Tout d'abord, rendez vous sur votre compte ISPConfig et créez un compte distant pour que l'API puisse faire son boulot.
Ce compte possédera les autorisations minimums nécessaires à acme.sh
Dans Système, choisissez "Utilisateurs distants" et cliquez sur "Ajouter un utilisateur".
Là, vous êtes seul maitre à bord. Choisissez un nom et un mot de passe solides.
A cet utilisateur distant, autorisez les permissions suivantes :
  • Fonctions Zone DNS
  • Fonctions TXT DNS

Et voilà, l'API de acme.sh est prête à accéder à votre serveur.

Ouvrez le fichier API de ISPConfig afin de l'éditer.
Le fichier API se trouve dans ./.acme.sh/dnsapi/dns_ispconfig.sh

Le début du fichier ressemble à ceci :

Code
#!/usr/bin/bash

# ISPConfig 3.1 API
# User must provide login data and URL to the ISPConfig installation incl. port. The remote user in ISPConfig must have access to:
# - DNS txt Functions

# Report bugs to https://github.com/sjau/acme.sh

# Values to export:
# export ISPC_User="remoteUser"
# export ISPC_Password="remotePassword"
# export ISPC_Api="https://ispc.domain.tld:8080/remote/json.php"
# export ISPC_Api_Insecure=1     # Set 1 for insecure and 0 for secure -> difference is whether ssl cert is checked for validity (0) or whether it is just accepted (1)

Dé-commentez (retirez les #)  et remplacez les lignes suivantes par vos données de connexion ISPConfig :
  • ISPC_User: Votre nom d'utilisateur distant.
  • ISPC_Password : Votre mot de passe pour ce compte distant.
  • ISPC_Api : L'adresse du script ISPConfig qui va gérer votre communication, par exemple, https://example.com:8080/remote/json.php.
Ce script est à sa place, il n'en n'existe pas d'autre. Gardez le chemin /remote/json.php !
  • ISPC_Api_Insecure : Si la valeur est de "1", une connexion sécurisée sera utilisée mais le certificat ne sera pas vérifié, il sera juste utilisé pour chiffrer la connexion (c'est parfait pour les certificats auto signés).
    Sinon, à "0", la validité du certificat sera vérifiée et tout sera stoppé si un problème de validité se présente.

Attention ! Il n'est pas envisageable d'utiliser une connexion non sécurisée. Ca ne marcherait pas.
Avec ISPConfig, la mise en place d'une connexion SSL à base de certificat auto signé est le minimum !




alex

  • Administrateur
  • Dictionnaire ambulant
  • ********
  • Hors ligne Hors ligne
  • Sexe: Homme
  • Messages: 17.383
  • Proprio officiel chez oim !

Une première mise à jour fait son apparition et concerne ISPConfig. :)
IP archivée
Pages: [1]   En haut
 

+ Réponse Rapide

Page générée en 0.188 secondes avec 26 requêtes.