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).

  • CLIstep 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)

  1. Crée les sous-domaines + CAA + DNSSEC.

  2. Forge la Root offline, puis les 2 ICAs (machines/humans).

  3. Déploie step-ca sur ca.jaccepte.ca et branche l’OIDC Keycloak.

  4. Publie CRL/OCSP/AIA et bundle.pem sur pki.jaccepte.ca.

  5. Pousse le trust bundle via Ansible Ă  tout le parc.

  6. Bascule OpenVPN sur Humans ICA (clients cert 1 an).

  7. Passe tes services internes en ACME privé (90j auto-renew).

  8. Laisse Let’s Encrypt pour les sites publics (séparation claire des périmètres).