Guide utilisateur ACME pour PKI Trust Manager
Activez ACME dans PKI Trust Manager et inscrivez des certificats avec acme.sh, certbot ou win-acme.
Ce guide explique comment activer ACME dans PKI Trust Manager et inscrire des certificats à l’aide de acme.sh, certbot ou win-acme.
1. Fonctionnement d’ACME ici#
PKI Trust Manager expose un serveur ACME RFC 8555 (composant de CertAPI). Les clients se connectent à l’URL directory ACME, créent un compte avec External Account Binding (EAB), commandent un certificat pour un domaine et reçoivent le certificat émis par votre CA.
ACME client ──https──▶ https://<acme-fqdn>/acme/directory (nginx → CertAPI)
│ account (EAB) → order → finalize
▼
CAProxy(ca.ApiUrl) → caapi → ADCS → certificate
- EAB est obligatoire. Le directory annonce
externalAccountRequired: true; le serveur n’accepte pas les comptes sans EAB. - La validation du domaine peut être automatiquement validée (
RequireDomainValidation = 0dans l’application ACME) ou imposée viahttp-01/dns-01.
2. Configuration administrateur — activer ACME dans PKI Trust Manager#
Effectuez ces étapes une fois pour chaque domaine ACME (dans Web Admin UI ou en tant qu’administrateur).
-
Créer une application ACME
- Web Admin UI → Integrations → New
- Type : ACME
- Domain : nom d’hôte ACME, par exemple
acme.secure.tron(doit correspondre à l’en-tête Host envoyé par le client, sans port) - Certificate template : choisissez un modèle associé à votre CA (par exemple
Secure-WorkstationAuthentication→Secure-ISSUING-CA) - Require domain validation :
Offpour valider automatiquement les défis,Onpourhttp-01/dns-01
-
Créer un utilisateur/une entité ACME (EAB)
- Web Admin UI → Users → Create → type ACME
- L’interface génère et affiche deux valeurs : enregistrez-les.
- Key ID (KID) — par exemple
58913e5c-1690-455c-9a73-834586af9daf - HMAC key — par exemple
OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk - Ce sont les identifiants EAB client (
--eab-kid/--eab-hmac-key).
-
DNS
- Faites pointer le FQDN ACME vers le serveur PKI Trust Manager :
acme.secure.tron → <server IP>
- Faites pointer le FQDN ACME vers le serveur PKI Trust Manager :
-
Routage du reverse proxy (nginx)
- Le FQDN ACME doit être routé vers CertAPI. Si le déploiement utilise le script d’installation, ajoutez le FQDN aux entrées ACME supplémentaires (
EXTRA_ACME_FQDNSdans.env, par exempleacme,acme2,acme3,acme-eab.secure.tron), relancez la mise à jour nginx (option de déploiement 2 — Add or Modify FQDNs), ou ajoutez-le ànginx.minimal.confserver_namepuis recréez nginx. - Vérification :
curl -k https://<acme-fqdn>/acme/directorydoit renvoyer le directory ACME.
- Le FQDN ACME doit être routé vers CertAPI. Si le déploiement utilise le script d’installation, ajoutez le FQDN aux entrées ACME supplémentaires (
-
Paramètres client (facultatif)
Acme, Enabled = truepour le client (valeur par défaut).CertificatePolicy, RequireApproval = falsepour l’émission automatique.
3. Utilisation côté client#
Tous les exemples utilisent
acme-eab.secure.tron, KID58913e5c-1690-455c-9a73-834586af9dafet HMACOTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk. Remplacez-les par vos propres valeurs.
3a. acme.sh (Linux / macOS / Windows Git Bash)#
# install (one time)
curl https://get.acme.sh | sh
# issue (use http:// directory URL for lab setups with self-signed cert;
# directory advertises http:// URLs anyway)
~/.acme.sh/acme.sh --issue \
--server http://acme-eab.secure.tron/acme/directory \
-d acme-eab.secure.tron \
--eab-kid 58913e5c-1690-455c-9a73-834586af9daf \
--eab-hmac-key 'OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk' \
--webroot /tmp/acme-webroot \
--keylength 2048 \
--force
# certificates land in ~/.acme.sh/acme-eab.secure.tron/
# renew (acme.sh installs cron/task automatically; or run --renew manually)
~/.acme.sh/acme.sh --renew -d acme-eab.secure.tron --force3b. certbot (Linux / macOS / WSL2 sur Windows)#
# install: Debian/Ubuntu
sudo apt-get install -y certbot
# macOS: brew install certbot
# Windows: use WSL2 (certbot has no native Windows support)
# LAB ONLY — trust PKI Trust Manager self-signed cert (certbot verifies TLS
# and has no insecure flag). Not needed with real certificate.
sudo cp /opt/pki-trust-manager/certs/cert.crt /usr/local/share/ca-certificates/pki-tm.crt
sudo update-ca-certificates
# issue (EAB + RSA 2048 are required — certbot defaults to ECDSA, which
# ADCS template rejects)
sudo certbot certonly --manual --preferred-challenges http \
--server https://acme-eab.secure.tron/acme/directory \
-d acme-eab.secure.tron \
--eab-kid 58913e5c-1690-455c-9a73-834586af9daf \
--eab-hmac-key 'OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk' \
--key-type rsa --rsa-key-size 2048 \
--manual-auth-hook 'true' \
--agree-tos -m [email protected] -n
# certificates land in /etc/letsencrypt/live/acme-eab.secure.tron/
# (certbot installs automatic renewal task)3c. win-acme (Windows natif)#
# download + extract win-acme (no installer):
# https://github.com/win-acme/win-acme/releases (win-acme.v2.2.9.1701.x64.trimmed.zip)
# LAB ONLY — trust PKI Trust Manager self-signed cert in Windows store:
Import-Certificate -FilePath cert.crt -CertStoreLocation Cert:\CurrentUser\Root
# issue (filesystem validation avoids needing admin; server auto-passes)
.\wacs.exe --source manual --host acme-eab.secure.tron `
--baseuri https://acme-eab.secure.tron/acme/directory `
--eab-key-identifier 58913e5c-1690-455c-9a73-834586af9daf `
--eab-key OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk `
--validation filesystem --webroot C:\certs\acmewebroot `
--store pemfiles --pemfilespath C:\certs `
--accepttos --emailaddress [email protected] --notaskscheduler
# certificates exported to C:\certs\ (acme-eab.secure.tron-crt.pem, -key.pem, -chain.pem)4. Vérification#
# issued certificate
openssl x509 -in <cert-file> -noout -subject -issuer -dates -ext subjectAltName
# expect: CN/SAN = your ACME domain, issuer = your CA (e.g. Secure-ISSUING-CA)Dans Web Admin UI, l’inscription apparaît dans Certificates avec le statut Issued.
5. Dépannage#
| Symptôme | Cause / correction |
|---|---|
externalAccountRequired / erreurs EAB | Utilisez des valeurs --eab-kid / --eab-hmac-key valides de l’utilisateur ACME |
serverInternal à la création du compte | Le parcours sans EAB n’est pas pris en charge — utilisez toujours EAB |
certbot: denied by the CA | certbot a choisi ECDSA par défaut — ajoutez --key-type rsa --rsa-key-size 2048 |
acme.sh: curl error 60 | Certificat TLS auto-signé — utilisez l’URL directory http:// (labo) ou faites confiance au certificat |
| certbot/win-acme : échec de vérification TLS | Importez le certificat auto-signé dans le magasin de confiance (labo uniquement) |
| Le port 443 affiche Web UI au lieu d’ACME | Le FQDN ACME manque dans nginx server_name — ajoutez-le à EXTRA_ACME_FQDNS et mettez nginx à jour |
unauthorized sur new-order | Acme:Enabled est désactivé pour le client |
| Refus de taille de clé | Taille minimale de la clé dans le modèle ADCS — utilisez RSA 2048 |
| win-acme : « Run as administrator » | La validation SelfHosting requiert un administrateur — utilisez plutôt --validation filesystem |
| win-acme : erreur renewal-info | Problème serveur non bloquant dans l’image ; le certificat est tout de même émis |
6. Référence — endpoints ACME#
| Endpoint | Port |
|---|---|
https://<fqdn>/acme/directory | 443 |
https://<fqdn>:8556/acme/directory | 8556 (port local dédié à ACME) |
http://<fqdn>/acme/directory | 80 (le directory annonce des URL http://) |