SSL – Outil : step-ca (SmallStep)
Contexte :
Créer un certificat SSL/TLS pour sécuriser une connexion en HTTPS entre un serveur (homeassistant.local) et des clients (mon ordinateur, téléphone Android).
Les certificats sont à installer sur tous les postes clients (Android compris) pour fonctionner correctement.
Avants-propos :
- PowerShell à jour.
- Raccourcis clavier pour ouvrir Powershell facilement
Win+X>A - Conserver la fenêtre de Terminal ouverte tout le temps !
- Documentation : smallstep
- Liens utile : Keyfactor
- Commandes utiles :
cleanNettoyer le terminal avec la commandeipconfig /flushdnsPermet de vider les enregistrement DNS en mémoire (cache)Win+R>mmccertmgrcertlmdevmgmt
Installation de step CLI sur Windows
Vérification de la présence de l’outil :
PowerShell
step version
En cas d’absence, il faut bien sure procéder à son installation.
Nous allons le faire par l’intermédiaire d’un autre outil…
Via scoop
(plus simple, recommandé)
Si vous avez déjà scoop :
PowerShell
scoop install step
… Sinon, pour installer scoop :
PowerShell
irm get.scoop.sh -outfile 'install.ps1'
.\install.ps1 -RunAsAdmin [-OtherParameters ...]
# I don't care about other parameters and want a one-line command
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
Une fois le composant « scoop » installé, vérifiez la présence de l’outil « step » :
PowerShell
step version
Initialiser ton autorité de certification (CA)
Crée un répertoire de travail :
PowerShell
step version
Crée un répertoire de travail :
PowerShell
mkdir "$env:USERPROFILE\.step"
cd "$env:USERPROFILE\.step"
Lance l’initialisation :
PowerShell
step ca init
Résumé :
⚠️ It looks like step is already configured to connect to an authority.
You can use 'contexts' to easily switch between teams and authorities.
Learn more at https://smallstep.com/docs/step-cli/the-step-command#contexts.
✔ Deployment Type: Standalone
What would you like to name your new PKI?
✔ (e.g. Smallstep): Local CA
What DNS names or IP addresses will clients use to reach your CA?
✔ (e.g. ca.example.com[,10.1.2.3,etc.]): 192.168.0.104
What IP and port will your new CA bind to? (:443 will bind to 0.0.0.0:443)
✔ (e.g. :443 or 127.0.0.1:443): :443
What would you like to name the CA's first provisioner?
✔ (e.g. you@smallstep.com): Gotcha
Choose a password for your CA keys and first provisioner.
✔ [leave empty and we'll generate one]:
Generating root certificate... done!
Generating intermediate certificate... done!
✔ Root certificate: C:\Users\Gotcha\.step\certs\root_ca.crt
✔ Root private key: C:\Users\Gotcha\.step\secrets\root_ca_key
✔ Root fingerprint: 850ac14e40a0aa1fb7e9df014863c7ac3d702b37cfa2adc549ff864278ac45a3
✔ Intermediate certificate: C:\Users\Gotcha\.step\certs\intermediate_ca.crt
✔ Intermediate private key: C:\Users\Gotcha\.step\secrets\intermediate_ca_key
✔ Database folder: C:\Users\Gotcha\.step\db
✔ Default configuration: C:\Users\Gotcha\.step\config\defaults.json
✔ Certificate Authority configuration: C:\Users\Gotcha\.step\config\ca.json
Your PKI is ready to go. To generate certificates for individual services see 'step help ca'.
FEEDBACK 😍 🍻
The step utility is not instrumented for usage statistics. It does not phone
home. But your feedback is extremely valuable. Any information you can provide
regarding how you’re using `step` helps. Please send us a sentence or two,
good or bad at feedback@smallstep.com or join GitHub Discussions
https://github.com/smallstep/certificates/discussions and our Discord
https://u.step.sm/discord.
Explications :
✔ Deployment Type: Standalone
Pour un usage exclusivement local et pour un petit besoin personnel et ponctuel, installation en Standalone est suffisante et simple.What would you like to name your new PKI?
Demande un nom à donner. J’ai mis Local CA.What DNS names or IP addresses will clients use to reach your CA?
C’est le serveur DNS pour atteindre votre site. Moi par exemple, étant caché derrière un Reverse Proxy (Nginx), je dois indiquer l’adresse de ce dernier car c’est lui qui va rediriger la requête ensuite vers le serveur correspondant.
C’est aussi typiquement là où sera stocké le certificat SSL 192.168.0.104What IP and port will your new CA bind to? (:443 will bind to 0.0.0.0:443)
Port de renvoie pour associé le certificat SSL. N’oubliez pas les deux points. :443What would you like to name the CA's first provisioner?
Un nom, une coordonnée… Gotcha!Choose a password for your CA keys and first provisioner.
Bon là c’est la sécurité. Sachant que Nginx ne gère pas les « passphrase » nous allons faire sauter ce mot de passe dans le futur mais il nous faudra le retenir car il nous sera demandé. Si vous en choisissez un par défaut, il s’affichera en clair donc facile à faire un copier/coller si vous fermez pas la fenêtre…
Perso j’ai mis 1234
Voilà, votre base est ainsi créée mais ce n’est pas terminé pour autant !
Nous venons juste de créer l’autorité de certification (CA) sur laquelle nous allons nous appuyer pour construire un certificat pour notre serveur.
Certificats
Serveur
Lisez et adaptez à votre besoin :
PowerShell
step certificate create homeassistant.local server.crt server.key --ca "$env:USERPROFILE\.step\certs\root_ca.crt" --ca-key "$env:USERPROFILE\.step\secrets\root_ca_key" --no-password --not-after 87600h --insecure --san 192.168.0.100 --san homeassistant.local
PowerShell
explorer "$env:USERPROFILE\.step"
homeassistant.local: Nom du certificat. Normalement, nom de votre serveur (étiquette).server.crt: Certificat pour le serveur.root_ca.crt: Se base sur le certificat de cette autorité de confiance.root_ca_key: clé (privée) associée à l’autorité de confiance.--not-after: durée de validité (en heures).--no-password: Pour supprimer le mot de passe précédement créé. Il vous sera demander de le ressaisir pour l’enlever.--san homeassistant.localcible le nom FQDN du serveur. Le certificat peut être affecté à plusieurs adresses, même aux IP. N’abusez pas non plus de cette souplesse…explorer: ouvrir le dossier
Please enter the password to decrypt C:\Users\Gotcha\.step\secrets\root_ca_key:
✔ Would you like to overwrite server.key [y/n]: y
✔ Would you like to overwrite server.crt [y/n]: y
Donc à l’exécution de la commande, vous êtes invité à ressaisir le mot de passe afin de le neutraliser et du coup, le script vous demande de confirmer (ou pas) la mise à jour des fichiers.
Suite à quoi vous vous retrouvez avec les fichiers servert.crt et server.key à l’emplacement %USERPROFILE%/.step
Optionnel : intermédaire
Pour parfaire la chaine de certification, nous allons inclure le certificat intermédiaire pour faire une chaine complète.
Ne me demandez pas le rôle de ce certificat, je n’en sais rien, je sais juste qu’il n’est pas souvent nécessaire mais puisque nous l’avons…
PowerShell
Copy-Item "$env:USERPROFILE\.step\certs\intermediate_ca.crt" .\
Cela va copier le certificat intermediate_ca.crt dans l’emplacement… où se trouve exécuté le script. Si vous n’avez pas fermé la fenêtre depuis le début (bravo, vous suivez !) cela correspond à C:\step-ca Sinon c’est %USERPROFILE%.
PowerShell
Get-Content server.crt, intermediate_ca.crt | Set-Content server_fullchain.crt
Concaténation des fichiers pour n’en former plus qu’un seul.
Voilà, vous avez désormais vos fichiers prêts à être transférés !
Windows
- Un petit coup de
ipconfig /flushdns certmgr.msc> Autorité de certification de confiance > Certificat > Recherchez (selon l’exemple) « Local CA ».
=> Si vous ne voyez pas votre certificat CA : il faut l’installer manuellement via le commandes suivantes :
PowerShell
# Chemin vers votre fichier de certificat
$certPath = "$env:USERPROFILE\.step\certs\root_CA.crt"
# Importer le certificat dans le magasin des autorités de certification racine de confiance pour l'ordinateur local
Import-Certificate -FilePath $certPath -CertStoreLocation Cert:\LocalMachine\Root
# Redémarre le gestionnaire des certificats
certutil -pulse
# Nettoie le cache DNS de Windows
ipconfig /flushdns
- Redémarrer votre PC si vraiment vous n’y arrivez pas.
Android
- Le fichier correspondant au certificat CA se trouve dans
%USERPROFILE%\.step\certs\root_ca.crt - Lire l’article ci-dessous :
Boite à outils
- Pour obtenir des informations sur un certificat
PowerShell
openssl x509 -in certificat.crt -text -noout



