Certificats
Le module Certificats est un coffre-fort sécurisé pour la gestion des certificats numériques SSL/TLS et autres certificats de sécurité. Il permet de centraliser, surveiller les dates d'expiration et stocker de façon chiffrée les certificats et leurs clés privées associées.

Vue d'ensemble
Le module Certificats est conçu pour les MSP qui gèrent les certificats SSL/TLS de leurs clients. Chaque certificat peut stocker les métadonnées publiques (domaine, émetteur, dates de validité, empreinte) ainsi que les données sensibles chiffrées (clé privée, passphrase, chaîne de certificats). Des alertes visuelles signalent les certificats qui expirent bientôt avec des badges colorés (Active en vert, Expired en rouge, Expiring in N days en orange).
Sécurité et chiffrement
Architecture de chiffrement
Les données sensibles des certificats sont chiffrées en AES-256-GCM avec une clé unique par tenant :
- Chaque tenant possède une clé de chiffrement dédiée stockée dans la table
smartdoc_encryption_keys - Cette clé de tenant est elle-même chiffrée par le Service de Gestion des Clés (KMS) avant d'être persistée
- Lors d'une opération de chiffrement, la clé de tenant est d'abord déchiffrée par le KMS, puis utilisée pour chiffrer les données
Les champs chiffrés sont :
- Clé privée (
private_key_encrypted) - la clé RSA/ECDSA associée au certificat - Passphrase (
passphrase_encrypted) - le mot de passe protégeant la clé privée - Chaîne de certificats (
certificate_chain_encrypted) - les certificats intermédiaires et racine
Ces données ne sont jamais retournées par l'API lors d'un listing ou d'une consultation standard. Elles ne sont accessibles que via l'action Révéler (voir section dédiée).
Isolation par tenant
Chaque tenant possède sa propre clé de chiffrement. Il est techniquement impossible pour un tenant d'accéder aux données sensibles d'un autre tenant, même en cas de fuite de la base de données.
Journal d'accès dédié
Chaque accès à un certificat est enregistré dans smartdoc_certificate_access_log avec :
- Type d'accès (view, reveal, create, update, delete)
- Adresse IP de l'utilisateur
- User-agent du navigateur
- Horodatage
- Succès ou échec
Fonctionnalités principales
Tableau de bord de statut
La page affiche un tableau de bord en 4 métriques en haut de liste :
| Métrique | Description |
|---|---|
| Total certificats | Nombre total de certificats |
| Actifs | Certificats avec statut active |
| Expirent bientôt | Certificats dont la validité expire dans les 30 prochains jours |
| Interne / Client | Répartition par niveau d'accès |
Alertes d'expiration automatiques
Le système détecte automatiquement les certificats proches de leur expiration et affiche des badges colorés :
| Badge | Condition | Couleur |
|---|---|---|
| Actif | Valide, plus de 30 jours restants | Vert |
| Expire dans N jours | Moins de 30 jours avant expiration | Orange |
| Expiré | Date de validité dépassée | Rouge |
| En attente | Statut pending | Jaune |
| Révoqué | Statut revoked | Gris |
Le seuil d'alerte est configurable par certificat via le champ expiry_alert_days (défaut: 30 jours).
Types de certificats
Les certificats sont organisés par types, configurés par l'administrateur. Les types incluent par exemple SSL DV, SSL OV, SSL EV, Wildcard, Code Signing, S/MIME, etc. Les types ont des noms bilingues (FR/EN).
Indexation pour DocBot (RAG)
Chaque certificat créé ou modifié est automatiquement indexé dans le moteur de recherche de SmartDoc. DocBot peut ainsi répondre à des questions comme "Quel est le certificat SSL du domaine client.example.com ?" ou "Quels certificats expirent ce mois-ci ?".
Interface utilisateur
Navigation
Accédez au module via : SmartDoc > Certificats
Si une entreprise cliente est sélectionnée dans le contexte actif, la liste est filtrée pour n'afficher que ses certificats.
Modes d'affichage
Le module supporte quatre modes d'affichage accessibles via la barre d'outils :
| Mode | Description |
|---|---|
| Petites cartes | Grille compacte (6 colonnes) : nom et badge de statut uniquement |
| Cartes moyennes | Grille intermédiaire (4 colonnes) : nom, domaine, statut, date d'expiration |
| Grandes cartes | Grille détaillée (3 colonnes) : nom, type, domaine, date d'expiration, client |
| Tableau | Vue tabulaire avec toutes les colonnes : nom, client, type, domaine, date de validité, statut, accès, actions |

La vue tableau affiche l'ensemble des certificats avec leurs informations clés dans un format tabulaire. Chaque ligne présente le nom du certificat, le client associé, le type (SSL/TLS Certificate, Code Signing, Wildcard, etc.), le domaine protégé, les dates de validité et le statut sous forme de badge coloré. Le tableau de bord en haut résume les métriques : nombre total de certificats, actifs, expirant bientôt et la répartition interne/client.
Filtres disponibles
- Recherche textuelle - recherche vectorielle full-text sur nom, domaine, émetteur, description
- Statut - Actif, Expiré, Révoqué
- Type - filtre par type de certificat
- Niveau d'accès - Interne, Client, Public
- Expiration prochaine - via le filtre
expiring_days(API)
Actions disponibles
- Nouveau certificat - panneau latéral de création avec upload de fichier optionnel
- Voir les détails - panneau latéral avec toutes les informations (sans données sensibles)
- Modifier - édition dans le panneau latéral, avec possibilité de remplacer le fichier
- Révéler les secrets - affichage temporaire de la clé privée et passphrase (60 secondes)
- Télécharger - téléchargement du fichier certificat (PEM, PFX, P7B...)
- Changer le niveau d'accès - modification inline dans la liste
- Supprimer - suppression avec confirmation
Créer un certificat
Le bouton + Add Certificate ouvre un panneau latéral de création qui permet de saisir toutes les informations du certificat en une seule étape.

Le formulaire est organisé en sections :
- Entreprise — Sélection du client associé via un menu déroulant
- Type — Choix du type de certificat (Wildcard Certificate, SSL/TLS, Code Signing, etc.)
- Description — Champ texte libre pour décrire l'usage du certificat
- Notes (internal) — Notes visibles uniquement par les techniciens MSP
- Certificate Details — Émetteur (Issuer), Nom commun (Common Name), Domaine, Algorithme
- Dates — Date de début de validité (Valid From) et date d'expiration (Valid Until)
- Certificate File — Zone de glisser-déposer pour uploader le fichier certificat (PEM, PFX, P7B...)
- Sensitive Data — Clé privée et Passphrase, chiffrées avant stockage
- Status et Access Level — Statut du certificat et niveau de visibilité
Cliquez sur Create pour enregistrer le certificat. Les données sensibles sont automatiquement chiffrées en AES-256-GCM avant d'être persistées.
Détail d'un certificat
Cliquez sur un certificat dans la liste pour ouvrir le panneau de détail latéral. Ce panneau présente toutes les informations du certificat de manière structurée.

En-tête
L'en-tête affiche le nom du certificat (ex: Herocop.ca) et son type (ex: Code Signing). L'entreprise associée est indiquée juste en dessous (ex: Fortyvia). Des boutons d'édition et de fermeture sont disponibles en haut à droite.
Actions rapides
Le bouton Reveal Secrets permet d'afficher temporairement les données sensibles chiffrées (clé privée, passphrase). Cette action est tracée dans le journal d'audit.
Sections d'information
| Section | Contenu |
|---|---|
| Details | Émetteur (Issuer), Nom commun (Common Name), Domaine |
| Validity | Date de début, date d'expiration avec indicateur d'alerte, statut (active/expired) |
| Metadata | Niveau d'accès modifiable via un menu déroulant (Internal/Client) |
Éléments liés
La section Linked Items affiche le nombre d'éléments liés au certificat avec un badge compteur. Les certificats peuvent être liés à des actifs, des documents et des identifiants pour créer des relations croisées dans la documentation.

Dans cet exemple, le certificat « Herocop.ca » est lié à trois éléments :
- 10.0.1.249 — un actif réseau (asset)
- Patch Management Policy — un document SmartDoc
- Datto RMM — un identifiant (credential) avec l'email associé
Ajouter des liens
Le bouton + Add Links ouvre un dialogue permettant de rechercher et sélectionner des éléments à lier dans trois catégories :

| Catégorie | Description |
|---|---|
| Assets | Équipements physiques ou virtuels de l'inventaire |
| Documents | Documents SmartDoc (politiques, procédures, guides) |
| Credentials | Identifiants du coffre-fort de mots de passe |
Chaque élément peut être sélectionné via un menu déroulant avec recherche. Cliquez sur Add Selected Links pour confirmer les associations.
Historique d'accès
La section History en bas du panneau affiche le journal des consultations du certificat avec le nombre total d'entrées.

Chaque entrée indique :
- Le type d'action (Viewed, Revealed, Created, Updated, Deleted)
- L'avatar et le nom de l'utilisateur ayant effectué l'action
- Le temps écoulé depuis l'action (ex: 1 min ago, 2 days ago)
Le lien View more permet de consulter l'historique complet lorsque la liste est longue.
Champs et informations
Identification
| Champ | Description | Obligatoire |
|---|---|---|
| Nom | Nom descriptif du certificat | Oui |
| Nom (FR) | Nom en français | Non |
| Type | Type de certificat (SSL DV, EV, Wildcard...) | Non |
| Entreprise | Entreprise cliente associée | Non |
| Description | Description détaillée (jusqu'à 10 000 caractères) | Non |
| Description (FR) | Version française | Non |
| Notes | Notes internes (jusqu'à 10 000 caractères) | Non |
Informations du certificat
| Champ | Description |
|---|---|
| Émetteur | Autorité de certification (Let's Encrypt, DigiCert, Sectigo...) |
| Sujet | Sujet complet du certificat |
| Nom commun (CN) | Common Name du certificat |
| Domaine | Domaine principal protégé |
| Numéro de série | Identifiant unique du certificat |
| Algorithme | RSA, ECDSA, etc. |
| Taille de clé | 2048, 4096 bits, etc. |
| Empreinte SHA-256 | Hash d'identification du certificat |
| Empreinte SHA-1 | Hash d'identification alternatif |
Validité
| Champ | Description |
|---|---|
| Valide à partir de | Date de début de validité |
| Valide jusqu'au | Date d'expiration |
| Seuil d'alerte (jours) | Nombre de jours avant expiration déclenchant l'alerte (défaut: 30) |
| Renouvellement automatique | Indique si le renouvellement est géré automatiquement |
Statut et classification
| Champ | Description |
|---|---|
| Statut | active, expired, revoked, pending, archived |
| Niveau d'accès | Visibilité du certificat (internal, client, public) |
| Tags | Étiquettes pour l'organisation et le filtrage |
| Champs personnalisés | Champs supplémentaires définis par l'utilisateur |
Données chiffrées (sensibles)
Ces champs ne sont jamais affichés en clair dans la liste ou les détails standard :
| Champ | Description |
|---|---|
| Clé privée | Clé privée RSA/ECDSA (chiffrée AES-256-GCM) |
| Passphrase | Mot de passe de la clé privée (chiffré) |
| Chaîne de certificats | Certificats intermédiaires/racine (chiffrée) |
Statistiques d'accès
| Champ | Description |
|---|---|
| Nombre d'accès | Compteur de consultations du certificat |
| Dernier accès | Horodatage de la dernière consultation |
Gestion des fichiers
Formats acceptés
Les fichiers de certificats acceptés sont :
| Format | Extension | Description |
|---|---|---|
| PEM | .pem, .crt, .cer | Format texte Base64 |
| PKCS#12 | .pfx, .p12 | Certificat + clé privée regroupés |
| PKCS#7 | .p7b, .p7c | Chaîne de certificats |
| DER | .der | Format binaire |
| Documents PDF | .pdf | Documentation du certificat |
Taille maximale : 50 Mo par fichier.
Validation de sécurité
Lors de l'upload, le fichier est validé par vérification du magic number (contenu binaire) en plus de l'extension, pour prévenir les attaques par substitution de type MIME. Un fichier dont le contenu ne correspond pas à l'extension déclarée est rejeté.
Le nom de fichier est sanitisé pour prévenir les attaques par traversée de chemin (path traversal) : seuls les caractères alphanumériques, points, tirets et underscores sont conservés.
Stockage
Les fichiers sont stockés dans le bucket MinIO isolé du tenant (tenant-{tenantId}), sous le chemin smartdoc/certificates/{id}/certificate.{ext}. Le quota de stockage du tenant est vérifié avant chaque upload.
Téléchargement
Le bouton de téléchargement (icône flèche vers le bas) est affiché uniquement si un fichier est associé au certificat. Le téléchargement s'effectue via une URL présignée temporaire.
Révéler les secrets
L'action Révéler (icône clé) permet d'afficher temporairement les données sensibles chiffrées d'un certificat.
Comportement
- L'utilisateur clique sur l'icône clé
- Le système déchiffre la clé privée et la passphrase depuis la base de données
- Les données sont affichées en clair pendant 60 secondes
- Après 60 secondes, elles sont automatiquement masquées
- L'utilisateur peut cliquer à nouveau sur l'icône clé pour masquer manuellement
Traçabilité
Chaque utilisation de la fonction Révéler est enregistrée dans le journal d'accès avec :
- L'identifiant de l'utilisateur
- L'horodatage exact
- L'adresse IP
- Le navigateur utilisé
Actions en lot
En mode sélection (disponible en vue tableau), les actions suivantes sont applicables sur plusieurs certificats simultanément :
| Action | Description |
|---|---|
| Changer le niveau d'accès | Modifier la visibilité en masse |
| Changer le statut | Mettre à jour le statut (Actif, Expiré, Révoqué) |
| Archiver | Marquer comme archivés |
| Dupliquer | Créer des copies |
| Supprimer | Supprimer définitivement |
Niveaux d'accès
Les certificats supportent trois niveaux d'accès :
| Niveau | Description |
|---|---|
internal | Visible uniquement par les techniciens MSP (défaut) |
client | Visible via le portail client (si entreprise cliente associée) |
public | Accessible publiquement (usage rare, ex: certificat racine public) |
Les données sensibles (clé privée, passphrase) ne sont jamais exposées au portail client, quel que soit le niveau d'accès.
Traçabilité et audit
Toutes les opérations sur les certificats sont enregistrées dans deux tables :
Journal d'audit général (smartdoc_audit_log)
Enregistre les opérations CRUD :
- Création, consultation, modification, suppression
- Identifiant de l'utilisateur et de l'entreprise cliente
- Adresse IP et user-agent
Journal d'accès aux certificats (smartdoc_certificate_access_log)
Table dédiée aux accès sensibles :
- Type d'accès :
view,reveal,create,update,delete - Raison optionnelle fournie par l'utilisateur lors de la révélation
- Succès ou échec de l'opération avec motif en cas d'échec
- Compteur d'accès cumulatif (
access_count)
Bonnes pratiques
- Renseignez toujours la date d'expiration pour bénéficier des alertes automatiques
- Configurez un seuil d'alerte approprié : 30 jours pour la plupart des certificats, 60-90 jours pour les certificats critiques
- Stockez la clé privée et la passphrase dans SmartDoc pour centraliser la documentation - elles sont chiffrées et sécurisées
- Utilisez les tags pour catégoriser vos certificats (ex:
production,staging,wildcard,code-signing) - Gardez le niveau d'accès Interne pour les certificats avec clé privée - ne les publiez jamais au niveau Client
- Le niveau d'accès Client peut être utilisé pour les certificats publics (sans clé privée) que le client doit pouvoir consulter
- Effectuez des revues régulières de la liste des certificats expirant bientôt (tableau de bord)
- Uploadez le fichier de certificat pour disposer du téléchargement direct en cas de besoin de réinstallation
Dernière mise à jour : mars 2026