🔐 PKI - Renouvellement automatique de certificats avec HashiCorp Vault

Comment configurer Vault + Vault Agent pour émettre et renouveler automatiquement des certificats TLS via le moteur PKI intégré.

1. Prérequis
2. Configuration de Vault PKI

a. Activer le moteur PKI

vault secrets enable pki
vault secrets tune -max-lease-ttl=8760h pki
    

b. Générer une CA interne

vault write pki/root/generate/internal\ 
 common_name="demo.example.com"\
 ttl=8760h
    

c. Configurer les URLs de distribution

vault write pki/config/urls\
 issuing_certificates="http://127.0.0.1:8200/v1/pki/ca"\
 crl_distribution_points="http://127.0.0.1:8200/v1/pki/crl"
    

d. Créer un rÎle pour les certificats

vault write pki/roles/web-role\
 allowed_domains="demo.example.com"\
 allow_subdomains=true\
 max_ttl="72h"
    
3. Créer une politique ACL
# web-role-policy.hcl
path "pki/issue/web-role" {
  capabilities = ["create", "update"]
}
    

Créer et attacher cette politique à un token :

vault policy write web-role-policy web-role-policy.hcl
vault token create -policy="web-role-policy" -period=24h -renewable=true
    

Enregistrer ce token dans agent-token.txt.

4. Configuration du Vault Agent

Fichier vault-agent-config.hcl

pid_file = "./vault-agent.pid"
auto_auth {
  method "token_file" {
    config = {
      token_file_path = "./agent-token.txt"
    }
  }
  sink "file" {
    config = {
      path = "./vault-token-renewed.txt"
    }
  }
}
cache {
  use_auto_auth_token = true
}
template {
  source      = "./cert-template.ctmpl"
  destination = "./certs/fullchain.pem"
  command     = "systemctl reload nginx"
}
    

Fichier cert-template.ctmpl

{{ with secret "pki/issue/web-role" "common_name=server.demo.example.com" "ttl=48h" }}
{{ .Data.certificate }}
{{ .Data.issuing_ca }}
{{ end }}
    
5. Lancement du Vault Agent
mkdir -p certs
vault agent -config=vault-agent-config.hcl
    

Le certificat renouvelé sera écrit dans ./certs/fullchain.pem.

6. Renouvellement automatique
7. Vérification
openssl x509 -in ./certs/fullchain.pem -noout -text | grep "Not After"
    
📁 Organisation des fichiers
./certs/
├── fullchain.pem           # Certificat + CA
./vault-token-renewed.txt   # Token renouvelé par Vault Agent
./agent-token.txt           # Token de départ
./cert-template.ctmpl       # Template Vault certificate
./vault-agent-config.hcl    # Configuration Vault Agent
    
✅ RĂ©sumĂ©
Composant Description
Vault PKI GénÚre et signe les certificats
Vault Agent GénÚre, renouvelle et installe les certificats
Token Authentifie l’agent auprùs de Vault
Template Fichier pour formater le certificat
🚀 Pour aller plus loin