Section 04PKIFactorDevOpsSecOps

Protocoles d'enrôlement

ACME, EST, SCEP, CMP — un seul orchestrateur, tous les standards.

Dernière mise à jour 2026-04-18

PKIFactor expose simultanément les quatre principaux protocoles d'enrôlement standardisés. Chaque protocole est une passerelle vers le moteur CLM : la politique d'émission (algorithme, durée, usages, CA backend) est définie une seule fois dans un template, indépendamment du protocole choisi par le client.

Un template, tous les protocoles

Un même template CLM (web-tls, pq-server…) peut être exposé simultanément via ACME, EST, SCEP et CMP. La politique d'émission reste unique et centralisée.

4.1. ACME (RFC 8555)

ACME (Automated Certificate Management Environment) est le standard issu de Let's Encrypt, désormais utilisé bien au-delà du Web (cert-manager, Caddy, Traefik, Apache, Nginx, AWS, Azure).

Activation d'un template ACME

bash
curl -X PATCH https://pki.exemple.com/api/v1/clm/templates/5 \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "acme_enabled": true,
    "acme_path": "web-tls",
    "acme_http01_enabled": true,
    "acme_dns01_enabled": true
  }'

L'URL du directory ACME devient :

ruby
https://pki.exemple.com/acme/web-tls/directory

Exemple avec certbot

bash
sudo certbot certonly \
  --server https://pki.exemple.com/acme/web-tls/directory \
  --standalone \
  --email admin@acme.com \
  --agree-tos \
  --no-eff-email \
  -d www.acme.com -d acme.com

Exemple avec acme.sh

bash
acme.sh --issue \
  --server https://pki.exemple.com/acme/web-tls/directory \
  -d www.acme.com -d acme.com \
  --webroot /var/www/html

Exemple avec cert-manager (Kubernetes)

yaml
# ClusterIssuer pointant vers PKIFactor ACME
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: pkifactor-acme
spec:
  acme:
    server: https://pki.exemple.com/acme/web-tls/directory
    email: admin@acme.com
    privateKeySecretRef:
      name: pkifactor-acme-account-key
    solvers:
      - http01:
          ingress:
            class: nginx
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: www-acme-com
  namespace: web
spec:
  secretName: www-acme-com-tls
  issuerRef:
    name: pkifactor-acme
    kind: ClusterIssuer
  dnsNames:
    - www.acme.com
    - acme.com

4.2. EST (RFC 7030)

EST (Enrollment over Secure Transport) est le standard préféré pour les équipements réseau (Cisco, Juniper, Aruba) et les terminaux durcis (mobiles d'entreprise, IoT industriel). Il s'appuie sur HTTPS + mTLS et expose des endpoints /.well-known/est/.

Endpoints exposés

EndpointFonction
GET /.well-known/est/cacertsRécupération de la chaîne de CA
POST /.well-known/est/simpleenrollEnrôlement initial (CSR PKCS#10)
POST /.well-known/est/simplereenrollRenouvellement
GET /.well-known/est/csrattrsAttributs CSR attendus

Enrôlement initial via curl

bash
# 1. Génération de la clé privée + CSR
openssl req -new -newkey rsa:3072 -nodes \
  -keyout device.key -out device.csr \
  -subj "/CN=switch-01.acme.com/O=ACME"

# 2. Enrôlement (authentification basique pour le bootstrap)
curl https://pki.exemple.com/.well-known/est/simpleenroll \
  -u "bootstrap-user:bootstrap-pass" \
  --cacert ca-chain.pem \
  -H "Content-Type: application/pkcs10" \
  --data-binary @device.csr \
  -o device.p7

Configuration Cisco IOS-XE (exemple)

arduino
crypto pki trustpoint PKIFACTOR
 enrollment profile EST_PROFILE
 fqdn switch-01.acme.com
 subject-name CN=switch-01.acme.com,O=ACME
 revocation-check ocsp
 rsakeypair switch-01-key 3072

crypto pki profile enrollment EST_PROFILE
 method-list cisco
 enrollment url https://pki.exemple.com/.well-known/est
 authentication trustpoint PKIFACTOR-CA

4.3. SCEP (RFC 8894)

SCEP (Simple Certificate Enrollment Protocol) reste largement utilisé pour le provisioning des terminaux mobiles (Microsoft Intune, Jamf, MobileIron) et les équipements réseau anciens.

URL SCEP exposée

arduino
https://pki.exemple.com/scep/{template_code}

Exemple Microsoft Intune (NDES connector)

yaml
SCEP URL    : https://pki.exemple.com/scep/mdm-device
Challenge   : (généré dynamiquement par PKIFactor pour chaque enrôlement)
Algorithme  : RSA 2048 ou ECDSA P-256
Subject     : CN={{DeviceName}},OU={{DepartmentName}}

Configuration challenge dynamique

PKIFactor génère un challenge à usage unique (TTL 15 min) consommé par le SCEP enroll, évitant le partage d'un secret statique :

bash
curl -X POST https://pki.exemple.com/api/v1/scep/challenges \
  -H "Authorization: Bearer $TOKEN" \
  -d '{ "template_code": "mdm-device", "subject_pattern": "CN=*.acme.com" }'
json
{
  "challenge": "scep_a1b2c3...",
  "expires_at": "2026-04-18T10:17:00Z",
  "single_use": true
}

4.4. CMP (RFC 4210)

CMP (Certificate Management Protocol) est utilisé dans les environnements télécoms (3GPP), l'automotive (V2X) et l'industrie où la traçabilité forte et la protection cryptographique des messages est exigée.

URL CMP

bash
https://pki.exemple.com:8829/cmp/{template_code}

Exemple OpenSSL CMP

bash
openssl cmp \
  -cmd ir \
  -server https://pki.exemple.com:8829/cmp/iot-device \
  -ref device-id-001 \
  -secret pass:$INITIAL_SHARED_SECRET \
  -subject "/CN=iot-001.acme.com/O=ACME" \
  -newkey iot-001.key \
  -certout iot-001.pem \
  -trusted ca-chain.pem

4.5. Comparatif

Comparatif des protocoles d'enrôlement
RFC 8555
ACME
Web, cloud, Kubernetes, automation
Complexité
Auth client
Compte + challenge HTTP/DNS
RFC 7030
EST
Équipements réseau, IoT durci
Complexité
Auth client
mTLS + bootstrap user
RFC 8894
SCEP
MDM, terminaux mobiles
Complexité
Auth client
Challenge partagé / dynamique
RFC 4210
CMP
Télécoms, automotive, industrie
Complexité
Auth client
PSK ou clé publique