--- title: step-ca created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, pki, certificats, acme, tls, ssh, go, securite, auto-hebergement] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/smallstep/certificates] --- # 🔒 step-ca > **AutoritĂ© de certification (CA) privĂ©e et serveur ACME** : Ă©met des certificats X.509 (HTTPS) et SSH automatiquement pour toute votre infra. La rĂ©fĂ©rence open source pour remplacer le bordel des `openssl` / `cfssl` / scripts maison. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | [smallstep.com](https://smallstep.com/) | | **GitHub** | [smallstep/certificates](https://github.com/smallstep/certificates) | | **License** | Apache-2.0 | | **Langage** | Go | | **Étoiles GitHub** | 8.5k ⭐ | | **DerniĂšre MAJ** | 2026-06-03 | | **CatĂ©gorie** | [[cat-security|SĂ©curitĂ©]], [[cat-pki|PKI]] | ## 📝 Description **step-ca** (anciennement "step certificates") est un **serveur de PKI privĂ©** open source qui fait trois choses principales : 1. **AutoritĂ© de certification X.509** : Ă©met des certificats HTTPS pour vos services internes (homelab, k8s, microservices) 2. **Serveur ACME** : expose le protocole ACMEv2 (comme Let's Encrypt, mais en privĂ©) 3. **AutoritĂ© SSH** : Ă©met des certificats SSH (pour se passer de `authorized_keys`) **CaractĂ©ristiques** : - ✅ **Certificats courts (24-72h)** avec rotation auto = si un cert fuite, il expire vite - ✅ **Multi-provisioners** : ACME, OAuth OIDC (Keycloak, Okta, Azure AD), X5C, JWK, AWS/GCP/Azure instance identity, SCEP - ✅ **Compatible avec tous les ACME clients** : Caddy, Traefik, certbot, acme.sh, win-acme, Apache, Nginx - ✅ **Backends DB** : Badger (dĂ©faut), BoltDB, MySQL, PostgreSQL - ✅ **ClĂ©s RSA, ECDSA, EdDSA** - ✅ **Peut agir comme intermĂ©diaire d'une CA racine existante** - ✅ **API REST + CLI `step`** pour scripter - ✅ **Single binary** `step-ca` + companion CLI `step` **Positionnement** : c'est **l'alternative moderne Ă  `mkcert`, `cfssl`, et aux scripts bash maison** pour gĂ©nĂ©rer des certs. La grosse diffĂ©rence : **step-ca est un serveur** que vos services contactent pour obtenir un cert automatiquement (via ACME), pas un outil local. **Cas d'usage typiques** : - **Homelab** : certs HTTPS auto-signĂ©s pour tous vos services (sans popup de sĂ©curitĂ©) - **Kubernetes / microservices** : certs mTLS auto-renouvelĂ©s entre pods - **SSH sans mot de passe** : certs SSH pour 50 serveurs, plus de clĂ©s Ă  distribuer - **VPN mTLS** : certs pour OpenVPN, WireGuard - **API gateway** : certs clients pour authentifier des tiers **DiffĂ©rence avec Let's Encrypt** : Let's Encrypt ne signe que pour des **domaines publics vĂ©rifiables par DNS/HTTP**. step-ca signe pour **n'importe quel nom** (interne, RFC1918, `*.lan`, etc.). **Public cible** : admins qui veulent **industrialiser la gestion des certificats** (renouvellement auto, expiration courte, zero-touch), au-delĂ  de la simple poignĂ©e de certs Let's Encrypt. ## 🚀 Installation ### Option 1 : Docker Compose (serveur ACME privĂ©) ```yaml # docker-compose.yml version: '3.8' services: step-ca: image: smallstep/step-ca:0.30 container_name: step-ca restart: unless-stopped entrypoint: /bin/sh command: -c "step ca init --name='Internal CA' --dns='ca.example.com,ca.internal' --address=:9000 --provisioner='admin' --password-file=/home/step/secrets/password && step ca $(cat /home/step/secrets/args.txt)" volumes: - ./step:/home/step - ./certs:/certs ports: - "9000:9000" # ACME + API networks: - pki step-ca-renewer: image: smallstep/step-ca:0.30 container_name: step-ca-renewer restart: unless-stopped entrypoint: /bin/sh command: -c "while true; do step ca renew --daemon; sleep 12h; done" volumes_from: - step-ca networks: [pki] networks: pki: driver: bridge ``` > ⚠ **En prod**, on gĂ©nĂšre gĂ©nĂ©ralement les clĂ©s **hors Docker** (sur la machine hĂŽte) puis on monte les volumes. Voir la doc officielle. ### Installation native (recommandĂ©e pour un CA) ```bash # Linux wget https://github.com/smallstep/certificates/releases/download/v0.30.2/step-ca_0.30.2_amd64.deb sudo dpkg -i step-ca_0.30.2_amd64.deb # macOS brew install step # Init (une seule fois, crĂ©e la CA) step ca init \ --name "Internal Lab CA" \ --dns "ca.example.com,ca.local" \ --address ":9000" \ --provisioner "admin" \ --password-file ./ca-password.txt # Lancer step ca $(cat ./step-args.txt) # Lit la config gĂ©nĂ©rĂ©e par init ``` ### Variante : certs pour Caddy / Traefik (ACME) ```caddyfile # Caddyfile - Caddy utilise step-ca comme CA privĂ©e { acme_ca https://ca.example.com:9000/acme/acme/directory acme_ca_root /path/to/ca-root.crt } app.internal { respond "Hello from internal service" } ``` ```yaml # traefik.yml - MĂȘme chose pour Traefik certificatesResolvers: stepca: acme: caServer: https://ca.example.com:9000/acme/acme/directory caCertificates: /path/to/ca-root.crt storage: /acme.json httpChallenge: entryPoint: web ``` ## ⚙ Configuration Initiale 1. **Initialiser la CA** : `step ca init` (crĂ©e `~/.step/` avec clĂ©s + config) 2. **DĂ©marrer step-ca** : port 9000 par dĂ©faut, ACME sur `/acme/acme/directory` 3. **Distribuer la CA root** : copier `~/.step/certs/root_ca.crt` sur tous les clients (ou ajouter Ă  la trust store) 4. **CrĂ©er un provisioner** pour chaque mĂ©thode d'auth (ACME, OIDC, JWK...) 5. **Pour les clients** : utiliser `step ca certificate ` (one-shot) ou un client ACME (renouvellement auto) 6. **SSH** : `step ssh` gĂ©nĂšre des clĂ©s + certs Ă  usage de l'utilisateur ```bash # Exemple : cert pour un service web interne step ca certificate "app.internal" app.crt app.key \ --provisioner "admin" \ --san "app.internal" \ --not-after 720h # Exemple : cert SSH pour un user step ssh certificate git@github.com $(step ssh keygen) \ --provisioner "admin" ``` ## 🔄 Alternatives ### Open Source - **mkcert** — Certs auto-signĂ©s locaux, simple mais pas de serveur - **cfssl** (Cloudflare) — PKI en CLI/JSON, pas de serveur ACME - **HashiCorp Vault PKI** — Secret manager + PKI dans la mĂȘme boĂźte - **Dogtag** (Red Hat) — CA enterprise complĂšte, trĂšs complexe - **OpenXPKI** — CA modulaire - **ejbca** — CA Java enterprise - **Let's Encrypt (staging)** — pour tester en sous-domaine public, pas interne ### PropriĂ©taires - **Smallstep Enterprise** — la version commerciale de step-ca (multi-CA, OCSP, HA) - **Microsoft AD CS** — Active Directory Certificate Services - **Venafi** — gestion de PKI enterprise - **Keyfactor** — PKI + IoT ## 🔐 SĂ©curitĂ© - **Certs courts** : durĂ©e par dĂ©faut 24h pour les certs, 24h pour les provisioners - **HSM support** (optionnel) : clĂ©s stockĂ©es sur YubiHSM, AWS CloudHSM, GCP HSM - **OCSP** : step-ca peut servir des rĂ©ponses OCSP - **CRL** : Certificate Revocation List gĂ©rĂ©e - **Audit logs** : toutes les Ă©missions loggĂ©es - **mTLS** pour l'API admin - **Provisioners multiples** : un par contexte (ACME public, OIDC pour employĂ©s, etc.) - **Pas de stockage de clĂ©s privĂ©es** : step-ca **dĂ©lĂšgue** la gĂ©nĂ©ration de clĂ© au client (jamais transmise) > 💡 **Bonne pratique** : sĂ©parer la **CA root** (offline, jamais sur le rĂ©seau) de la **CA intermĂ©diaire** (en ligne, signe les certs). Si l'intermĂ©diaire est compromise, on peut la revoquer sans tout refaire. ## 📚 Ressources - [Documentation officielle](https://smallstep.com/docs/step-ca) - [Tutoriels Smallstep](https://smallstep.com/docs/tutorials) - [step CLI](https://github.com/smallstep/cli) - [Comparaison features OSS vs Enterprise](https://smallstep.com/docs/step-ca/commercial-ca-features) ## Pages LiĂ©es - [[cat-security|SĂ©curitĂ©]] — CatĂ©gorie SĂ©curitĂ© - [[tls-https]] — Concepts TLS/HTTPS - [[app-caddy]] — Utilise step-ca comme CA privĂ©e - [[app-traefik]] — IntĂ©grable avec step-ca - [[comparatif-reverse-proxy]] — Comparaison dĂ©taillĂ©e