Intégration d'une PKI OpenSSL avec le protocole ACME pour l'automatisation des certificats internes
Intégration d’une PKI OpenSSL avec le protocole ACME pour l’automatisation des certificats internes
1. Introduction : Automatiser votre PKI interne avec ACME
La gestion manuelle des certificats SSL/TLS
pour les services internes – qu’il s’agisse de serveurs web, de bases de données, d’API ou de tableaux de bord internes – représente un défi constant. Cette tâche engendre une charge opérationnelle significative, un risque d’expiration des certificats et des incohérences potentielles. Le protocole ACME (Automatic Certificate Management Environment), popularisé par Let’s Encrypt pour la sécurisation des certificats publics, offre une solution robuste pour automatiser également la gestion des certificats au sein des infrastructures à clés publiques (PKI
) privées. L’adoption d’ACME en interne s’inscrit dans une tendance plus large d’automatisation et de gestion de l’infrastructure “as code
”, visant non seulement la gratuité des certificats mais surtout une efficacité opérationnelle accrue et une posture de sécurité renforcée par la réduction des interventions manuelles.
Cet article a pour objectif principal de guider le lecteur à travers le processus d’intégration de son infrastructure PKI
existante, basée sur OpenSSL
, avec une autorité de certification
(AC
) compatible ACME. Cette intégration permettra l’émission, le renouvellement et, dans une certaine mesure, la révocation automatisés des certificats pour les points de terminaison internes. En mettant en œuvre une telle solution, les administrateurs peuvent considérablement alléger la charge de travail liée à la gestion des certificats internes et améliorer la sécurité globale en garantissant que tous les services internes utilisent des connexions TLS
valides et fiables.
Nous explorerons les concepts fondamentaux, les choix architecturaux, la mise en place d’une AC
émettrice de certificats ACME (en utilisant Smallstep CA comme exemple principal), la configuration des clients ACME courants et l’utilisation des certificats ainsi obtenus.
2. Comprendre les composants essentiels
Avant de plonger dans la mise en œuvre, il est crucial de revoir les concepts clés qui sous-tendent cette intégration.
2.1. Bref rappel : PKI OpenSSL (AC Racine, AC Intermédiaire, Chaîne de certification)
Une infrastructure à clés publiques (PKI
) est un système complet permettant de créer, gérer, distribuer, utiliser, stocker et révoquer des certificats numériques.4 Au cœur de toute PKI
se trouve l’Autorité de Certification Racine (AC Racine)
. Elle constitue l’ancre de confiance ultime. Ses clés privées doivent être protégées avec le plus grand soin, idéalement conservées hors ligne.
Pour des raisons de sécurité et de flexibilité, l’AC Racine
ne signe généralement pas directement les certificats d’entité finale (les certificats pour les serveurs ou les utilisateurs). Elle signe plutôt des certificats pour des Autorités de Certification Intermédiaires (AC Intermédiaires
). Ces AC Intermédiaires
sont ensuite responsables de l’émission des certificats d’entité finale. Cette structure hiérarchique crée une chaîne de confiance : le certificat d’entité finale est signé par une AC Intermédiaire
, dont le certificat est lui-même signé par l’AC Racine
. Cette hiérarchie est fondamentale pour la scalabilité et la sécurité ; la séparation des rôles est un modèle de conception critique. Une PKI “plate”, où une unique AC Racine
émettrait tous les certificats, serait moins sécurisée et plus difficile à gérer. La compromission de l’AC Racine
entraînerait la compromission de l’ensemble. Les AC Intermédiaires
limitent l’impact d’une compromission et permettent une application plus flexible des politiques.
La sécurité de l’ensemble de la PKI repose sur la protection de la clé privée de l’AC Racine
, ce qui influence directement la décision d’utiliser une AC Intermédiaire
pour l’intégration ACME.
OpenSSL est l’outil de prédilection pour gérer ces opérations. Des commandes comme openssl genpkey
(pour générer des clés), openssl req
(pour créer des requêtes de signature de certificat - CSR
), openssl x509
(pour visualiser et manipuler des certificats) et openssl ca
(pour signer des certificats) sont couramment utilisées. Le fichier de configuration d’OpenSSL, typiquement openssl.cnf
, joue un rôle central en définissant les politiques de l’AC et les extensions des certificats.5 Ce fichier contient des sections importantes comme [ ca ] pour les directives de l’AC, [ req ] pour les informations des requêtes de certificat, et des sections de politique pour contrôler les champs du sujet des certificats.
Figure 1 : Hiérarchie d’une PKI typique
2.2. Bref rappel : Protocole ACME (Serveur, Client, Commande, Défis, Autorisation)
Le protocole ACME (Automated Certificate Management Environment), standardisé par la RFC 8555
, est conçu pour automatiser le cycle de vie des certificats X.509.1
Il facilite les interactions entre les autorités de certification et les serveurs des utilisateurs, permettant le déploiement automatisé d’une infrastructure à clés publiques à très faible coût.
Les acteurs principaux du protocole ACME sont :
- Le Client ACME : un logiciel qui s’exécute sur le serveur ou l’appareil de l’utilisateur nécessitant un certificat. Des clients populaires incluent
Certbot
etacme.sh
. - Le Serveur ACME : un logiciel qui s’exécute au niveau d’une autorité de certification.
La communication entre le client et le serveur ACME s’effectue via des messages au format JSON
transmis sur HTTPS
.
Le flux général d’obtention d’un certificat est le suivant :
- Le client ACME crée un compte auprès du serveur ACME.
- Le client soumet une “commande” (order) pour un nouveau certificat, spécifiant les identifiants (noms de domaine) souhaités.
- Le serveur ACME répond en présentant des “défis” (challenges) pour chaque identifiant. Ces défis servent à prouver que le client contrôle effectivement les domaines pour lesquels il demande un certificat.
- Le client ACME tente de relever ces défis (par exemple, en plaçant un fichier spécifique sur un serveur web pour le défi HTTP-01, ou en créant un enregistrement DNS spécifique pour le défi DNS-01).
- Une fois le défi relevé, le client notifie le serveur.
- Le serveur ACME vérifie que le défi a été correctement complété.
- Si la vérification est réussie, le client soumet une Requête de Signature de Certificat (CSR).
- Le serveur ACME vérifie la CSR et émet le certificat.
La standardisation des interactions par ACME, qui étaient auparavant manuelles ou propriétaires, a permis l’émergence d’un vaste écosystème de clients et de serveurs compatibles. Cette automatisation abaisse considérablement la barrière à l’utilisation du TLS
, conduisant à une meilleure sécurité pour un plus grand nombre de services, tant publics que privés.
(ex: placer un fichier, ajouter un enregistrement DNS) Client->>Serveur: 4. Notification: Défi prêt Serveur->>Client: 5. Vérification du défi (ex: GET HTTP, lookup TXT DNS) alt Défi réussi Client->>Serveur: 6. Soumission de la CSR Serveur-->>Client: 7. Émission du certificat else Défi échoué Serveur-->>Client: Erreur end
3. Architecture de votre PKI compatible ACME
L’objectif est d’intégrer une AC Racine
OpenSSL existante avec le protocole ACME. La stratégie architecturale privilégiée consiste à maintenir l’AC Racine
OpenSSL existante hors ligne. Celle-ci signera un certificat d’AC Intermédiaire
pour un serveur dédié qui agira comme AC émettrice
compatible ACME. Cette AC Intermédiaire en ligne gérera toutes les interactions avec les clients ACME et émettra les certificats d’entité finale.6 Le modèle “racine hors ligne, intermédiaire en ligne” est une pratique exemplaire pour la sécurité et la gestion opérationnelle des PKI. Appliquer ce modèle à l’intégration ACME en est une extension naturelle.
Pour le rôle de l’AC Intermédiaire émettrice ACME, nous utiliserons Smallstep CA (step-ca). Ce choix est justifié par ses fonctionnalités adaptées :
- Conçu pour fonctionner comme une AC intermédiaire.
- Fonctionnalité de serveur ACME intégrée.
- Bonne documentation pour l’intégration avec des racines externes.
Cette approche présente plusieurs avantages :
- Sécurité : La clé privée de l’
AC Racine
OpenSSL, hautement sensible, reste hors ligne et n’est utilisée qu’occasionnellement pour signer ou renouveler le certificat de l’AC Intermédiaire
. Tout système connecté à un réseau, comme un serveur ACME, est intrinsèquement plus exposé qu’un système isolé. Déléguer les fonctions ACME à uneAC Intermédiaire
limite les conséquences d’une éventuelle compromission. - Flexibilité : Le serveur ACME (
step-ca
) peut être géré, mis à jour, voire remplacé, sans impacter directement l’AC Racine
. - Conformité/Politique : L’
AC Racine
conserve le contrôle ultime, tandis que lAC Intermédiaire
peut avoir des politiques spécifiquement adaptées à l’émission automatisée via ACME. La décision d’utiliserSmallstep CA
est influencée par son support explicite de cette architecture (signature par une racine externe) et ses capacités ACME natives, simplifiant la solution globale. L’approche générale d’une PKI structurée avec des intermédiaires est courante. Cette architecture respecte et s’appuie sur cette structure présumée.
(ex: Certbot)"] ACMEClient2["Client ACME 2
(ex: acme.sh)"] Service1 Service2 end RootCA -- Signe --> SmallstepICA; SmallstepICA -- Émet Cert via ACME --> ACMEClient1; SmallstepICA -- Émet Cert via ACME --> ACMEClient2; ACMEClient1 -- Déploie Cert --> Service1; ACMEClient2 -- Déploie Cert --> Service2;
4. Mise en place de Smallstep CA comme votre AC Intermédiaire émettrice ACME
Cette section détaille la configuration de step-ca
pour qu’elle agisse comme une AC Intermédiaire
signée par votre AC Racine
OpenSSL existante.
4.1. Installation et Initialisation de step-ca
L’installation de l’interface de ligne de commande step
et du serveur step-ca
est la première étape. Les instructions officielles de Smallstep fournissent les détails pour différents systèmes d’exploitation.
Une fois installée, la commande step ca init
initialise une nouvelle PKI
. Elle pose une série de questions pour configurer l’AC
:
- Nom de la PKI (ex : Ma PKI Interne).
- Noms DNS ou adresses IP pour l’AC (ex :
ca.internal.example.com
,10.0.0.5
). - Adresse d’écoute pour l’AC (ex :
:8443
). - Nom du premier “provisioner” (un mécanisme d’authentification pour obtenir des certificats).
- Mot de passe pour ce provisioner et pour la clé de l’AC.
Il est important de noter que step ca init
crée par défaut sa propre AC Racine
et une AC Intermédiaire
signée par cette racine. Nous allons remplacer certains de ces artefacts pour utiliser notre propre chaîne de confiance basée sur l’AC Racine
OpenSSL existante. La commande step ca init
fournit un point de départ pratique et la structure de configuration nécessaire, même si certains des artefacts générés sont temporaires. Les fichiers et répertoires clés créés par step ca init
(généralement dans $HOME/.step
ou $STEPPATH
) incluent :
certs/root_ca.crt
: Le certificat de l’AC Racine auto-générée.secrets/root_ca_key
: La clé privée de l’AC Racine auto-générée.certs/intermediate_ca.crt
: Le certificat de l’AC Intermédiaire auto-générée.secrets/intermediate_ca_key
: La clé privée de l’AC Intermédiaire auto-générée.config/ca.json
: Le fichier de configuration principal de step-ca.config/defaults.json
: Les paramètres par défaut pour le client step.
4.2. Génération d’une CSR pour l’AC Intermédiaire step-ca (La “Voie Sécurisée”)
Pour intégrer notre AC Racine
OpenSSL, nous suivons une approche où la clé privée de l’AC Intermédiaire
step-ca
est générée localement sur le serveur step-ca
et ne le quitte pas. C’est plus sécurisé que de générer la paire de clés sur la machine de l’AC Racine
et de transférer la clé privée.
- Après
step ca init
, supprimez la clé privée de la racine auto-générée (elle ne sera pas utilisée) et remplacez le certificat racine auto-généré par le certificat public de votreAC Racine
OpenSSL existante :
shred -u $(step path)/secrets/root_ca_key
mv /chemin/vers/votre/root_ca_openssl.crt $(step path)/certs/root_ca.crt
- Utilisez la commande
step certificate create
pour générer une nouvelle clé privée pour l’AC Intermédiaire
step-ca
et uneCSR
correspondante :
step certificate create "ACME Intermédiaire Mon Organisation" \
intermediate_acme.csr intermediate_acme.key \
--profile intermediate-ca --csr \
--no-password --insecure
- Adaptez le nom commun ("
ACME Intermédiaire Mon Organisation
") et les noms de fichiers (intermediate_acme.csr
,intermediate_acme.key
). --profile intermediate-ca
: Spécifie que la CSR est pour une AC intermédiaire. Cette extension est critique.--csr
: Indique de générer une CSR au lieu d’un certificat auto-signé.--no-password --insecure
: La clé privéeintermediate_acme.key
sera écrite sur le disque sans chiffrement par mot de passe à ce stade.step-ca
la chiffrera ultérieurement avec son mot de passe principal lors de son chargement. Si une protection par mot de passe est souhaitée à ce niveau, omettez ces options.
La CSR (intermediate_acme.csr
) est maintenant prête à être transférée de manière sécurisée à la machine hébergeant l’AC Racine
OpenSSL pour signature.
4.3. Signature de la CSR de l’AC Intermédiaire par votre AC Racine OpenSSL hors ligne
Cette étape est la plus sensible du point de vue de la sécurité et doit être réalisée avec la plus grande prudence. L’AC Racine OpenSSL doit être sur une machine isolée (air-gapped
) ou un module matériel de sécurité (HSM).
-
Transfert sécurisé de la CSR : Transférez le fichier intermediate_acme.csr vers la machine de l’AC Racine (par exemple, via une clé USB chiffrée).
-
Configuration d’OpenSSL (openssl.cnf) pour l’AC Racine : Assurez-vous que le fichier
openssl.cnf
de votreAC Racine
dispose d’une section dédiée à la signature des certificats d’AC Intermédiaire
(souvent nomméev3_intermediate_ca
ou similaire). Cette section doit impérativement contenir :
basicConstraints = critical, CA:TRUE
- Idéalement,
pathlen:0
si cetteAC Intermédiaire
ne signera que des certificats d’entité finale et pas d’autresAC
:basicConstraints = critical, CA:TRUE, pathlen:0
. keyUsage = critical, keyCertSign, cRLSign
Des politiques (policy) appropriées doivent également être définies pour correspondre aux composants du nom du sujet si nécessaire. La justesse des extensionsv3_intermediate_ca
est cruciale ; une absence deCA:TRUE
empêcherait le certificat de fonctionner comme uneAC Intermédiaire
.
- Commande OpenSSL pour la signature :
Utilisez la commandeopenssl ca
pour signer la CSR :
openssl ca -config /chemin/vers/root_ca_openssl.cnf \
-extensions v3_intermediate_ca \
-days 3650 -notext -md sha256 \
-in /chemin/vers/intermediate_acme.csr \
-out /chemin/vers/signed_intermediate_acme.crt
- Adaptez
/chemin/vers/root_ca_openssl.cnf
au fichier de configuration de votreAC Racine
. - Adaptez
-days 3650
(10 ans) à la durée de validité souhaitée pour l’AC Intermédiaire. - Adaptez les chemins pour
intermediate_acme.csr
et le certificat de sortiesigned_intermediate_acme.crt
. Même avec des objectifs d’automatisation via ACME, les opérations fondamentales de la PKI, surtout celles impliquant l’AC Racine
, exigent des procédures strictes et une surveillance humaine.
4.Transfert sécurisé du certificat signé :
Transférez le certificat signé signed_intermediate_acme.crt
(et le certificat public de l’AC Racine
OpenSSL, s’il n’est pas déjà sur la machine step-ca
) vers la machine step-ca
.
4.4. Configuration de step-ca avec l’AC Intermédiaire signée et votre AC Racine OpenSSL
Maintenant, configurez step-ca
pour utiliser la nouvelle chaîne de certificats :
- Le certificat de votre
AC Racine
OpenSSL doit déjà être dans$(step path)/certs/root_ca.crt
(suite à l’étape 4.2). - Placez le certificat de l’
AC Intermédiaire
nouvellement signé (ex: signed_intermediate_acme.crt) dans$(step path)/certs/intermediate_ca.crt
. - Placez la clé privée de l’
AC Intermédiaire
générée à l’étape 4.2 (ex:intermediate_acme.key
) dans$(step path)/secrets/intermediate_ca_key
. - Assurez-vous que le mot de passe principal de
step-ca
(utilisé pour chiffrer les clés commeintermediate_ca_key
sur le disque) est défini de manière sécurisée et accessible àstep-ca
au démarrage (par exemple, via la variable d’environnementSTEPPASSPHRASE
ou un fichier de mot de passe) - Vérifiez le fichier
$(step path)/config/ca.json
. Les chemins pourroot
,crt
(certificat intermédiaire) etkey
(clé intermédiaire) doivent pointer vers les fichiers corrects que vous venez de mettre en place. Le fichierca.json
est au cœur de la configuration destep-ca
. Une cartographie correcte de la chaîne de certificats et des clés est essentielle pour questep-ca
fonctionne comme uneAC Intermédiaire
sous l’AC Racine
*OpenSSL.
{
"root": "$(step path)/certs/root_ca.crt",
"federatedRoots":,
"crt": "$(step path)/certs/intermediate_ca.crt",
"key": "$(step path)/secrets/intermediate_ca_key",
//... autres configurations...
"authority": {
//... provisioners, etc....
}
}
- Si nécessaire, amorcez la confiance pour l’interface de ligne de commande step envers cette nouvelle configuration d’AC :
step ca bootstrap --ca-url https://<votre-hote-ca>:<port> \
--fingerprint $(step certificate fingerprint $(step path)/certs/root_ca.crt)
L’amorçage des clients (y compris l’interface step elle-même sur l’hôte de l’AC) avec l’empreinte de la nouvelle AC Racine
OpenSSL est essentiel pour qu’ils fassent confiance aux certificats émis par cette instance de step-ca
.
7. Démarrez step-ca
en spécifiant le fichier de configuration et, si besoin, le fichier de mot de passe :
step-ca $(step path)/config/ca.json --password-file $(step path)/secrets/password.txt
(Adaptez la gestion du mot de passe à votre configuration).
5. Configuration de la fonctionnalité ACME dans Smallstep CA
step-ca
utilise des “provisioners” pour contrôler la manière dont les certificats sont émis. Pour activer le protocole ACME, un provisioner de type ACME doit être ajouté. Les provisioners
ne sont pas seulement des activateurs de protocoles comme ACME ; ils sont aussi des points où les politiques d’émission (domaines autorisés, durées des certificats, modèles X.509 spécifiques) peuvent être définies, offrant un contrôle granulaire.
Pour ajouter un provisioner ACME :
- Utilisez la commande suivante (remplacez
mon-acme-interne
par le nom souhaité pour votreprovisioner
) :
step ca provisioner add mon-acme-interne --type ACME
Cette commande modifie ca.json
ou la base de données backend si la gestion des provisioners à distance est activée.
2. Si la gestion des provisioners à distance n’est pas utilisée, redémarrez step-ca
ou envoyez-lui un signal SIGHUP
pour que les modifications prennent effet.
Les clients ACME ont besoin d’une “URL de répertoire” pour découvrir les capacités et les points de terminaison du serveur ACME. Pour step-ca
, cette URL est typiquement de la forme :
https://<votre-hote-ca>:<port>/acme/<nom-du-provisioner>/directory
Par exemple, si step-ca
est accessible à https://ca.example.com:8443
et que le provisioner
ACME s’appelle mon-acme-interne
, l’URL du répertoire sera :
https://ca.example.com:8443/acme/mon-acme-interne/directory
.
Le nom donné au provisioner ACME fait directement partie de cette URL
, que les clients devront utiliser précisément.
Des options avancées pour les provisioners
ACME peuvent exister, comme les types de défis autorisés ou l’exigence d’une liaison de compte externe (EAB
- External Account Binding).
6. Configuration des clients ACME pour votre AC ACME privée
Une fois step-ca
configuré et opérationnel avec un provisioner
ACME, l’étape suivante consiste à configurer les clients ACME (comme Certbot
, acme.sh
, etc.) sur vos serveurs internes pour qu’ils demandent et gèrent automatiquement les certificats auprès de votre nouvelle AC privée
.
6.1. Considérations clés
Deux aspects sont cruciaux lors de la configuration de n’importe quel client ACME pour une AC privée
:
-
Pointer vers l’URL du répertoire ACME correcte : Chaque client ACME doit être configuré pour utiliser l’URL du répertoire spécifique de votre instance
step-ca
et duprovisioner
ACME que vous avez créé (par exemple,https://ca.example.com:8443/acme/mon-acme-interne/directory
). -
Faire confiance à votre
AC Racine
OpenSSL : C’est une étape CRITIQUE. Par défaut, les clients ACME font confiance auxAC publiques
connues. Pour uneAC privée
, les clients doivent être explicitement configurés pour faire confiance au certificat de votreAC Racine
OpenSSL.**
Les méthodes courantes incluent l’utilisation d’une variable d’environnement (par exemple, REQUESTS_CA_BUNDLE pour Certbot, LEGO_CA_CERTIFICATES pour lego), d’un drapeau en ligne de commande (par exemple, –ca-bundle pour acme.sh), ou l’ajout du certificat de l’AC Racine au magasin de confiance système de la machine cliente (à utiliser avec prudence en raison de la confiance élargie que cela accorde).23 L’ajout de la racine personnalisée au magasin de confiance du système est pratique mais accorde une confiance large. Configurer explicitement la confiance par client/application offre un contrôle plus fin et est généralement plus sécurisé pour les environnements de production, conformément au principe du moindre privilège.
6.2. Tableau comparatif des types de défis ACME
Les clients ACME doivent prouver le contrôle des domaines via des défis. Le choix du type de défi dépend de l’environnement interne.
Type de Défi | Fonctionnement | Port(s) Requis | Supporte les Wildcards? | Avantages | Inconvénients | Cas d’usage typiques (internes) |
---|---|---|---|---|---|---|
HTTP-01 | Le client place un fichier spécifique à une URL http://<DOMAINE>/.well-known/acme-challenge/<TOKEN> |
HTTP (80) | Non | Simple à configurer avec un serveur web existant ; pas besoin d’accès DNS API. | Nécessite que le port 80 soit accessible depuis le serveur ACME ; ne fonctionne pas pour les certificats wildcard. | Services web internes directement accessibles sur le port 80 par le serveur step-ca . |
DNS-01 | Le client crée un enregistrement DNS TXT spécifique (_acme-challenge.<DOMAINE> ) avec une valeur donnée. |
DNS (53) | Oui | Supporte les certificats wildcard ; pas besoin d’ouvrir de ports sur le serveur. | Nécessite un accès API au fournisseur DNS pour automatiser ; la propagation DNS peut prendre du temps. | Lorsque les certificats wildcard sont nécessaires ; lorsque les serveurs ne sont pas directement accessibles depuis le serveur ACME ; gestion DNS centralisée. |
TLS-ALPN-01 | Le client présente un certificat TLS temporaire auto-signé avec une extension ALPN spécifique lors d’une connexion TLS. | HTTPS (443) | Non | Fonctionne sur le port HTTPS standard ; peut être utile si le port 80 est bloqué. | Plus complexe à configurer au niveau TLS ; ne supporte pas les wildcards ; peut ne pas fonctionner derrière certains proxies inverses. 26 | Services qui terminent TLS directement et où le port 443 est accessible ; environnements où le trafic HTTP est restreint. |
6.3. Exemple détaillé : Certbot
Certbot est un client ACME populaire développé par l’EFF.
- Demande d’un certificat :
Pour demander un certificat pourmon-service.interne.example.com
en utilisant le modestandalone
(Certbot démarre son propre serveur web temporaire) :
sudo REQUESTS_CA_BUNDLE=/chemin/vers/votre/root_ca_openssl.crt \
certbot certonly --standalone \
-d mon-service.interne.example.com \
--server https://ca.example.com:8443/acme/mon-acme-interne/directory \
--non-interactive --agree-tos --email admin@example.com
REQUESTS_CA_BUNDLE
: Indique à Certbot de faire confiance à votreAC Racine
OpenSSL.--standalone
: Mode de défi. Alternativement,--webroot -w /var/www/html
si un serveur web est déjà en cours d’exécution.-d
: Le domaine pour lequel demander le certificat.--server
: L’URL
du répertoire de votre serveur ACMEstep-ca
.
- Automatisation des renouvellements :
La commande
certbot renew
tente de renouveler tous les certificats gérés par Certbot qui approchent de leur expiration. Pour automatiser cela aveccron
, assurez-vous que la variableREQUESTS_CA_BUNDLE
est définie dans l’environnement du cron :
0 */12 * * * root REQUESTS_CA_BUNDLE=/chemin/vers/votre/root_ca_openssl.crt certbot renew --quiet
Étant donné que step-ca
émet par défaut des certificats de courte durée (24 heures), les paramètres de renouvellement par défaut de Certbot (conçus pour les certificats de 90 jours de Let’s Encrypt) sont inadéquats et doivent être ajustés. Il est crucial d’ajuster la fréquence du cron
et le paramètre renew_before_expiry
dans les fichiers de configuration de renouvellement de Certbot (par exemple, /etc/letsencrypt/renewal/mon-service.interne.example.com.conf
). Par exemple, pour un certificat de 24 heures, vous pourriez vouloir renouveler toutes les 8 heures et définir :renew_before_expiry = 8 hours
- Révocation d’un certificat : Pour révoquer un certificat :
sudo REQUESTS_CA_BUNDLE=/chemin/vers/votre/root_ca_openssl.crt \
certbot revoke --cert-path /etc/letsencrypt/live/mon-service.interne.example.com/fullchain.pem \
--reason unspecified \
--server https://ca.example.com:8443/acme/mon-acme-interne/directory
Notez que step-ca
lui-même gère le statut de révocation réel (via CRL/OCSP). Certbot ne fait qu’envoyer la requête de révocation. Certbot peut également vérifier l’état OCSP pour un renouvellement anticipé si un certificat est révoqué.28
6.4. Exemple détaillé : acme.sh
acme.sh
est un autre client ACME populaire, écrit en shell Unix.
- Demande d’un certificat :
Pour demander un certificat pour
mon-service.interne.example.com
en utilisant le modestandalone
:
acme.sh --issue -d mon-service.interne.example.com --standalone \
--server https://ca.example.com:8443/acme/mon-acme-interne/directory \
--ca-bundle /chemin/vers/votre/root_ca_openssl.crt
--ca-bundle
: Indique àacme.sh
de faire confiance à votreAC Racine
OpenSSL.--server
: L’URL du répertoire de votre serveur ACMEstep-ca
. D’autres modes de défi sont disponibles, comme--dns dns_cf
si vous utilisez Cloudflare pour votreDNS interne
et avez uneclé API
.
- Automatisation des renouvellements :
acme.sh
installe généralement sa propre tâche cron. Il se souvient des paramètres--ca-bundle
et--server
utilisés lors de l’émission initiale pour les renouvellements.
Pour les certificats de courte durée, il peut être nécessaire de forcer le renouvellement ou d’ajuster la fréquence.acme.sh
utilise un flag--days
qui peut être trop grossier pour des certificats de 24h, d’où la recommandation d’utiliser--force
dans les tâches cron.
Un exemple decron
pour forcer le renouvellement toutes les 8 heures pour un certificat de 24 heures :
0 */8 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --force > /dev/null
Les différences de comportement entre les clients, comme la mémorisation des configurations par acme.sh, peuvent simplifier les lignes de commande de renouvellement, mais leur logique de renouvellement par défaut peut également nécessiter un ajustement pour des durées de certificat très courtes.
- Révocation d’un certificat :
Pour révoquer un certificat :
acme.sh --revoke -d mon-service.interne.example.com \
--server https://ca.example.com:8443/acme/mon-acme-interne/directory \
--ca-bundle /chemin/vers/votre/root_ca_openssl.crt \
--ecc # Si la clé est ECC
Spécifiez une raison avec --revoke-reason <0-10>
(0 pour non spécifié).
6.5. (Optionnel) Bref exemple : step ca CLI comme client ACME
L’interface de ligne de commande step
elle-même peut agir comme un client ACME pour un serveur step-ca
.
- Demande d’un certificat :Assurez-vous que step ca bootstrap a été exécuté pour configurer l’interface CLI pour l’AC.
step ca certificate mon-service.interne.example.com my-service.crt my-service.key \
--provisioner mon-acme-interne
Cela suppose que l’interface CLI step est déjà configurée pour faire confiance à l’AC Racine
et connaît l’URL de l’AC grâce à l’amorçage.
L’utilisation de step ca
comme client offre une intégration étroite si step-ca
est le serveur, simplifiant potentiellement l’amorçage et la confiance. Cependant, il peut être moins riche en fonctionnalités pour des configurations de serveurs diverses que des clients dédiés.
- Renouvellement :
step ca renew my-service.crt my-service.key --force
L’automatisation nécessiterait de scripter cela avec des vérifications (par exemple, step certificate needs-renewal).30
- Révocation : La commande générale step ca revoke serait utilisée, mais les détails spécifiques au mode client ACME pour la révocation ne sont pas entièrement couverts dans les informations disponibles.12
step ca revoke --cert my-service.crt --key my-service.key <numéro-de-série-ou-domaine>
6.6. Tableau récapitulatif :
Configuration des clients ACME pour Smallstep CA
Le tableau suivant résume les configurations clés pour les clients ACME populaires avec step-ca
.
Client ACME | Configuration URL Répertoire ACME | Configuration Confiance AC Racine Personnalisée | Exemple de Snippet de Requête (abrégé) |
---|---|---|---|
Certbot | --server https://.../acme/<prov>/directory |
REQUESTS_CA_BUNDLE=/path/to/root.crt |
sudo REQUESTS_CA_BUNDLE=... certbot certonly --standalone -d domain --server... |
acme.sh | --server https://.../acme/<prov>/directory |
--ca-bundle /path/to/root.crt |
acme.sh --issue -d domain --standalone --server... --ca-bundle... |
step CLI | Configuré via step ca bootstrap |
Configuré via step ca bootstrap |
step ca certificate domain cert.pem key.pem --provisioner <prov> |
Lego | --server https://.../acme/<prov>/directory ou LEGO_ACME_SERVER |
LEGO_CA_CERTIFICATES=/path/to/root.crt |
LEGO_CA_CERTIFICATES=... lego --server... --email... -d domain run |
Caddy v2 | Caddyfile: acme_ca https://.../acme/<prov>/directory |
Caddyfile: acme_ca_root /path/to/root.crt |
{ acme_ca... acme_ca_root... } |
Traefik v2 | Config: caServer = "https://.../acme/<prov>/directory" |
LEGO_CA_CERTIFICATES=/path/to/root.crt (ou trust store système) |
certificatesResolvers.myresolver.acme.caServer = "..." |
Ce tableau fournit une référence rapide pour les options de configuration essentielles, améliorant la facilité d’utilisation pratique de cet article.
7. Utilisation de vos certificats émis par ACME
L’objectif final de l’obtention de certificats est de les utiliser pour sécuriser les communications. Une fois que vos clients ACME ont obtenu les certificats (généralement un fichier fullchain.pem contenant le certificat du serveur et la chaîne intermédiaire, et un fichier privkey.pem pour la clé privée), ils peuvent être appliqués à divers services internes.
Par exemple, pour configurer un serveur web
Nginx :
server {
listen 443 ssl;
server_name mon-service.interne.example.com;
ssl_certificate /etc/letsencrypt/live/mon-service.interne.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mon-service.interne.example.com/privkey.pem;
# Autres configurations SSL/TLS et du serveur...
}
Pour un serveur web
Apache :
<VirtualHost *:443>
ServerName mon-service.interne.example.com
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/mon-service.interne.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mon-service.interne.example.com/privkey.pem
# Autres configurations SSL/TLS et du VirtualHost...
</VirtualHost>
De nombreux clients ACME offrent des “hooks” ou des scripts de déploiement qui peuvent automatiser le rechargement des services après un renouvellement de certificat réussi.
Par exemple, Certbot peut être configuré pour recharger Nginx après chaque renouvellement.
Ces services internes sécurisés (une API interne, un serveur de prévisualisation pour un blog Hugo, un serveur Git auto-hébergé, etc.) peuvent maintenant être accédés de manière fiable via HTTPS
. Pour un blogueur Hugo, cela pourrait signifier sécuriser l’accès à des outils de développement ou de prévisualisation, ou même à des microservices qui soutiennent l’infrastructure du blog. L’automatisation du TLS
pour tous les services internes constitue une étape vers un modèle de sécurité “zero trust
”, où la confiance n’est pas implicitement accordée en fonction de l’emplacement réseau.
8. Conclusion et étapes suivantes
En suivant ce guide, vous avez intégré avec succès une PKI
OpenSSL existante avec une AC Intermédiaire
émettrice ACME, step-ca
, permettant la gestion automatisée des certificats pour vos services internes. Cette approche renforce la sécurité grâce au maintien hors ligne de l’AC Racine, aux renouvellements automatisés et à un déploiement TLS cohérent.
Pour la suite, plusieurs aspects méritent attention pour la maintenance et l’évolution de ce système :
- Mises à jour logicielles : Maintenez step-ca et vos clients ACME à jour pour bénéficier des correctifs de sécurité et des nouvelles fonctionnalités.
- Surveillance : Surveillez les processus de renouvellement ACME pour détecter et résoudre rapidement tout échec.
- Renouvellement de l’AC Intermédiaire : Établissez une politique pour le renouvellement du certificat de l’AC Intermédiaire step-ca elle-même auprès de votre AC Racine OpenSSL (par exemple, tous les 2 à 5 ans, bien avant son expiration).
- Révocation active : Si la vérification active de la révocation est critique pour vos services internes, explorez la mise en place de Listes de Révocation de Certificats (CRL) ou d’un répondeur OCSP (Online Certificate Status Protocol) pour l’AC Intermédiaire
step-ca
. - Fonctionnalités avancées de step-ca : Explorez les fonctionnalités plus avancées de
step-ca
, telles que les modèles de certificats pour un contrôle plus fin des extensions, d’autres types de provisioners pour différents scénarios d’authentification, et les capacités d’audit.
La mise en place de ce système est une étape significative, mais sa maintenance continue est tout aussi importante. Une mentalité “configurer et oublier” est risquée pour une PKI
. Ce système fournit une base solide qui peut s’adapter à l’évolution de vos architectures de services internes, comme l’adoption de microservices ou de maillages de services, en continuant de fournir une sécurité essentielle.