Skip to content

Comment révoquer une clé asymétrique

Cette page décrit une procédure pour révoquer une clé asymétrique dans l'ICP interne de S-Filer et rechiffrer tous les fichiers qui ont été chiffrés avec cette clé.

Note

Toutes les clés asymétriques gérées par S-Filer sont utilisées uniquement à l'interne au sein de la solution. Elles ne sont pas exposées à des systèmes ou utilisateurs externes. Par conséquent, le besoin de révoquer une clé est très rare et ne surviendrait typiquement que dans des circonstances exceptionnelles telles qu'une compromission de clé suspectée.

Attention

Ce processus n'est pas encore pris en charge par le CLI S-Filer. Il doit être effectué en utilisant des commandes de base de données tel que décrit ci-dessous. Une commande CLI sera ajoutée dans une version future.

Cette procédure implique de modifier directement les données dans la base de données et comporte donc certains risques de corruption des données. Ne pas tenter cette procédure sans avoir d'abord consulté le support OKIOK et assurez-vous que les étapes sont réalisées dans un environnement de non production avant de les exécuter en production.

Étape 1 : Identifier le certificat à révoquer

La première étape consiste à trouver le ou les certificats associés au destinataire (communauté ou utilisateur) dont la clé doit être révoquée.

Pour une communauté

sql
select c.NAME as 'Nom de la communauté',
    cert.Id as 'ID du certificat',
    cert.CreationDate,
    cert.ExpirationDate,
    c.RECIPIENTNODEID
from Community c
inner join Certificate cert on cert.RecipientNodeId = c.RECIPIENTNODEID
where c.NAME = '[NOM_DE_LA_COMMUNAUTÉ]'
order by cert.CreationDate desc

Remplacez [NOM_DE_LA_COMMUNAUTÉ] par le nom de la communauté dont la clé doit être révoquée.

Pour un utilisateur

sql
select u.NAME as 'Nom usager',
    cert.Id as 'ID du certificat',
    cert.CreationDate,
    cert.ExpirationDate,
    u.RECIPIENTNODEID
from Users u
inner join Certificate cert on cert.RecipientNodeId = u.RECIPIENTNODEID
where u.NAME = '[NOM_USAGER]'
order by cert.CreationDate desc

Remplacez [NOM_USAGER] par le nom de compte de l'utilisateur dont la clé doit être révoquée.

Notez la valeur RECIPIENTNODEID du résultat de la requête; elle sera utilisée à l'étape suivante.

Étape 2 : Expirer le certificat

Définissez les dates de création et d'expiration à une date dans le passé pour marquer le certificat comme expiré. Cela amènera le travail de rechiffrement des fichiers à traiter tous les fichiers chiffrés sous cette clé comme nécessitant un rechiffrement.

sql
update Certificate set
    CreationDate = '2001-01-01 00:00:00',
    ExpirationDate = '2001-01-01 00:00:00'
where RECIPIENTNODEID = [RECIPIENTNODEID];

Remplacez [RECIPIENTNODEID] par la valeur obtenue à l'étape 1.

Étape 3 : Générer une nouvelle clé

Utilisez le planificateur dans le configurateur pour exécuter manuellement le travail de Renouvellement des clés. Cela générera une nouvelle paire de clés pour le destinataire dont le certificat a été expiré à l'étape précédente.

Étape 4 : Rechiffrer les fichiers

Exécutez manuellement le travail de Rechiffrement des fichiers. Ce travail rechiffrera tous les fichiers qui ont été chiffrés avec le certificat révoqué en utilisant la nouvelle clé générée à l'étape 3.

Ce travail peut prendre beaucoup de temps selon le nombre et la taille des fichiers à traiter. Pour suivre sa progression, vous pouvez utiliser cette requête :

Pour une communauté

sql
SELECT c.id AS certificateId, c.expirationDate AS certificateExpirationDate,
    COUNT(fv.FileVersionId) AS nbFichiers
FROM Certificate c
    INNER JOIN RecipientNode rn ON c.recipientNodeId = rn.nodeId
    INNER JOIN FileVersion fv ON fv.recipientCertificateId = c.id
WHERE rn.recipientCommId IS NOT NULL
    AND rn.recipientName = '[NOM_DE_LA_COMMUNAUTÉ]'
GROUP BY c.id, c.expirationDate;

Pour un utilisateur

sql
SELECT c.id AS certificateId, c.expirationDate AS certificateExpirationDate,
    COUNT(fv.FileVersionId) AS nbFichiers
FROM Certificate c
    INNER JOIN RecipientNode rn ON c.recipientNodeId = rn.nodeId
    INNER JOIN FileVersion fv ON fv.recipientCertificateId = c.id
WHERE rn.recipientUserId IS NOT NULL
    AND rn.recipientName = '[NOM_USAGER]'
GROUP BY c.id, c.expirationDate;

Lorsque le rechiffrement est terminé, la ligne du certificat expiré devrait afficher zéro fichier et le nouveau certificat devrait contenir tous les fichiers.