jaccepte.ca - Domaine racine d’identité
(IAM, consentement, PKI privée, etc...)
Cartographie de domaine
-
id.jaccepte.ca → Keycloak (IDP/SSO + page de consentement OAuth).
-
ca.jaccepte.ca → Autorité interne (step-ca ou Easy-RSA + front Nginx).
-
crl.jaccepte.ca → Publication CRL.
-
ocsp.jaccepte.ca → Répondeur OCSP (si activé).
-
pki.jaccepte.ca → Portail PKI (bundle racine/intermédiaires, mode d’emploi).
-
(optionnel) acme.jaccepte.ca → Point d’entrée ACME privé (si step-ca).
-
sso.jaccepte.ca → Alias vers id.jaccepte.ca.
DNS à prévoir aussi :
-
CAA (public) sur
jaccepte.ca
et*.jaccepte.ca
:
0 issue "letsencrypt.org"
+0 iodef "mailto:security@jaccepte.ca"
(n’affecte pas ta CA privée). -
Active DNSSEC au registre.
-
(interne) zone int.jaccepte.ca pour les noms purement internes si tu veux séparer.
Design IAM (Keycloak)
-
Realm:
chezlepro
. -
User storage: OpenLDAP (ta source d’autorité).
-
2FA: WebAuthn/FIDO2 (TOTP en secours).
-
Clients OIDC: Proxmox, Icinga Web 2, Nextcloud, Mailcow, OpenWebUI, etc.
-
RBAC: rôles “admins-pki”, “ops”, “users” (map via groupes LDAP).
-
HA simple: 2 Keycloak (maison + Mathieu) derrière HAProxy (OVH) avec sticky sessions; PostgreSQL primaire + réplica (ou commence simple: un primaire + sauvegardes nocturnes).
Design PKI « jaccepte.ca »
Hiérarchie
-
J’accepte Root CA (offline, air-gapped, 10–15 ans).
-
Intermédiaires (online)
-
J’accepte Machines ICA (serveurs, services, mTLS).
-
J’accepte Humans ICA (utilisateurs, VPN).
-
Profils & crypto
-
Clés: ECDSA P-256 pour serveurs, RSA-3072 si compat héritée; SHA-256.
-
Durées: serveurs 90 jours (automatisation ACME), humains 1 an (OpenVPN), ICAs 5 ans.
-
EKU:
serverAuth
pour serveurs,clientAuth
pour clients/VPN. -
AIA/CDP dans les certs:
-
AIA (issuing cert URL) →
https://pki.jaccepte.ca/ica-machines.pem
-
OCSP →
http(s)://ocsp.jaccepte.ca
(si activé) -
CRL →
https://crl.jaccepte.ca/machines.crl
-
Publication & trust
-
pki.jaccepte.ca/bundle.pem
(root + ICAs). -
Rôle Ansible “trust-anchors” pour pousser
bundle.pem
sur toutes les VM. -
Nginx sur ca/crl/ocsp/pki avec TLS public (Let’s Encrypt).
Délivrance des certificats (workflows)
Option A (recommandée): step-ca (ACME + SCEP + OIDC)
-
ACME pour serveurs: renewal 100% auto (HTTP-01 interne ou DNS-01).
-
OIDC (Keycloak) comme “provisioner” → seules les personnes autorisées émettent.
-
SCEP pour équipements legacy (firewalls, switches si besoin).
-
CLI
step
pour humains (VPN) avec login OIDC → cert utilisateur 1 an.
Option B: Easy-RSA (ce que tu utilises déjà )
-
Garde Easy-RSA pour VPN users (scripté), mais publie quand même CRL/AIA/OCSP sous jaccepte.ca.
-
Tu pourras migrer tranquillement vers step-ca pour l’automatisation.
Nommage & SAN (exemples)
-
Serveur:
CN=asgard.int.jaccepte.ca
, SAN:DNS:asgard.int.jaccepte.ca, DNS:asgard, IP:10.16.0.10
. -
Service:
CN=icinga.int.jaccepte.ca
, SAN:DNS:icinga.int.jaccepte.ca
. -
Humain:
CN=Daniel Allaire
, SAN:email:daniel@chezlepro.ca, URI:urn:chezlepro:user:daniel
.
Sécurité opérationnelle
-
Root CA hors-ligne (clé sur YubiKey HSM ou au minimum dans coffre ignifuge).
-
Rotation des ICAs planifiée (T-12 mois).
-
OCSP stapling côté Nginx/HAProxy (si tu actives OCSP).
-
Journaux d’émission + alertes (Icinga) sur expirations <30j.
-
Secrets (clé step-ca / DB) dans age ou pass + sauvegarde chiffrée off-site.
Plan d’attaque (à dérouler tel quel)
-
Crée les sous-domaines + CAA + DNSSEC.
-
Forge la Root offline, puis les 2 ICAs (machines/humans).
-
Déploie step-ca sur ca.jaccepte.ca et branche l’OIDC Keycloak.
-
Publie CRL/OCSP/AIA et
bundle.pem
sur pki.jaccepte.ca. -
Pousse le trust bundle via Ansible Ă tout le parc.
-
Bascule OpenVPN sur Humans ICA (clients cert 1 an).
-
Passe tes services internes en ACME privé (90j auto-renew).
-
Laisse Let’s Encrypt pour les sites publics (séparation claire des périmètres).