Initial vault setup
This commit is contained in:
@@ -0,0 +1,209 @@
|
||||
---
|
||||
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 <hostname>` (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
|
||||
Reference in New Issue
Block a user