English version coming soon

The full public documentation is currently available in French only. English translation is in progress.

Section 01PKIFactorZetaCADevOpsArchitect

Getting started

From zero to first issued certificate in under 5 minutes.

Last updated 2026-04-18

PKIFactor s'installe en quelques minutes via Docker Compose, Kubernetes (Helm) ou en mode appliance virtuelle (OVA/QCOW2). Cette section vous guide jusqu'à votre premier certificat émis depuis l'autorité de certification de votre choix : ZetaCA (post-quantum), HashiCorp Vault PKI, Microsoft ADCS ou EJBCA.

1.1. Prérequis

ComposantVersion minimaleNotes
Docker Engine24.0+Compose v2 inclus
Kubernetes1.27+Helm 3.12+ pour le chart
PostgreSQL14+Géré par PKIFactor en mode standalone
RAM4 Go8 Go recommandés en production
CPU2 vCPU4 vCPU recommandés en production
Stockage20 GoSSD recommandé
RéseauTCP 443, 80+ 8443 (EST), 8555 (ACME), 8829 (CMP) selon protocoles activés

OS supportés : Ubuntu 22.04/24.04 LTS, RHEL 9, Debian 12, Rocky Linux 9.

Astuce

Pour démarrer le plus rapidement possible, l'installation Docker standalone convient à la plupart des PoC. Pour la production, privilégiez Helm (HA natif) ou l'OVA fournie (single-node durci).

1.2. Installation Docker (mode standalone)

bash
# 1. Téléchargement du bundle de release
curl -fsSL https://get.zetacert.com/install.sh | sh

# 2. Configuration minimale (interactive)
sudo pkifactor-ctl init \
  --domain pki.exemple.com \
  --admin-email admin@exemple.com \
  --license /chemin/vers/license.json

# 3. Démarrage des services
sudo pkifactor-ctl start

# 4. Vérification de l'état
sudo pkifactor-ctl status
# Expected output:
#   ✓ postgres        running   (healthy)
#   ✓ backend         running   (healthy)
#   ✓ frontend        running   (healthy)
#   ✓ acme            running   (healthy)
#   ✓ est             running   (healthy)
#   ✓ nginx           running   (healthy)

L'interface d'administration est disponible sur https://pki.exemple.com (le mot de passe initial est imprimé dans la sortie de pkifactor-ctl init).

1.3. Installation Kubernetes (Helm)

bash
# 1. Ajout du repository Helm
helm repo add zetacert https://charts.zetacert.com
helm repo update

# 2. Création du namespace dédié
kubectl create namespace pkifactor

# 3. Installation avec valeurs personnalisées
helm install pkifactor zetacert/pkifactor \
  --namespace pkifactor \
  --set global.domain=pki.exemple.com \
  --set postgres.persistence.size=50Gi \
  --set ingress.tls.secretName=pki-tls \
  --set license.secretName=pki-license

# 4. Suivi du déploiement
kubectl -n pkifactor get pods -w
yaml
# values-prod.yaml — exemple production HA
global:
  domain: pki.exemple.com
  imageRegistry: ghcr.io/zetacert

backend:
  replicaCount: 3
  resources:
    requests: { cpu: 500m, memory: 1Gi }
    limits:   { cpu: 2000m, memory: 4Gi }

postgres:
  enabled: false  # On utilise un Patroni externe
externalDatabase:
  host: pgbouncer.db.svc.cluster.local
  port: 6432
  database: clm_db
  existingSecret: pki-db-credentials

protocols:
  acme: { enabled: true,  port: 8555 }
  est:  { enabled: true,  port: 8443 }
  scep: { enabled: false }
  cmp:  { enabled: true,  port: 8829 }

ingress:
  enabled: true
  className: nginx
  annotations:
    cert-manager.io/cluster-issuer: zetaca-issuer

1.4. Premier certificat en 5 minutes

Étape 1 — Connexion au tableau de bord

swift
URL : https://pki.exemple.com
Identifiant : admin@exemple.com
Mot de passe : (généré à l'init, voir /var/lib/pkifactor/initial_password)

Étape 2 — Création d'une organisation

Dans l'interface, naviguez vers Settings → Organizations → New Organization et renseignez :

yaml
Name           : ACME Corporation
Code           : ACME
Default domain : acme.com

Étape 3 — Connexion d'une autorité de certification

Naviguez vers PKI Inventory → New CA Connection et choisissez votre type de PKI :

bash
# Exemple : connexion à un Vault PKI existant
curl -X POST https://pki.exemple.com/api/inventory/pkis \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Vault PKI Production",
    "type": "vault",
    "base_url": "https://vault.exemple.com:8200",
    "auth_method": "approle",
    "auth_config": {
      "role_id": "9566ebc2-...",
      "secret_id": "f8c3d9e1-..."
    },
    "mount_path": "pki-int/",
    "default_role": "srv-tls"
  }'

Étape 4 — Création d'un profil de certificat (template CLM)

bash
curl -X POST https://pki.exemple.com/api/clm/templates \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Web Server TLS",
    "code": "web-tls",
    "organization_id": 1,
    "pki_id": 1,
    "pki_role": "srv-tls",
    "key_algorithm": "ECDSA_P256",
    "validity_days": 90,
    "key_usage": ["digital_signature", "key_encipherment"],
    "extended_key_usage": ["server_auth"],
    "requires_approval": false,
    "acme_enabled": true,
    "acme_path": "web-tls"
  }'

Étape 5 — Émission du premier certificat

bash
# Via API
curl -X POST https://pki.exemple.com/api/certificates \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "template_code": "web-tls",
    "subject": { "common_name": "www.acme.com" },
    "sans": ["www.acme.com", "acme.com"],
    "key_format": "pkcs8",
    "delivery_format": "pem"
  }'

# Réponse
{
  "id": 42,
  "serial": "1A:2B:3C:...",
  "status": "issued",
  "not_before": "2026-04-18T10:00:00Z",
  "not_after":  "2026-07-17T10:00:00Z",
  "download_url": "/api/certificates/42/download?fmt=pem"
}
Aperçu dashboard — PKIFactor
PK
PKIFactor
admin@acme.com

Dashboard

Last updated 2 min ago

Active certs
12 458
+2.1% WoW
Expiring 30d
147
3 critical
Pending appr.
8
2 > 24h
Recent issuance
CNCAIssuedTTL
www.acme.comZetaCA Demo10:02 UTC90d
api.acme.comVault PKI09:48 UTC30d
vpn-gw.acme.comADCS Corp09:31 UTC1y
db-repl-02.acme.comEJBCA CE09:14 UTC90d
Diagramme 1.A — Parcours en 5 minutes
  1. 1
    Install
    Docker / Helm / OVA
  2. 2
    Create org
    Organisation
  3. 3
    Connect CA
    Vault, ADCS, ZetaCA
  4. 4
    Define template
    Algo, durée, usages
  5. 5
    Issue cert
    API ou UI
< 5 min