Supposons le scénario suivant :
- On utilise certutil.exe ou le commandlet PowerShell Backup-CAService pour sauvegarder sa base de données Active Directory Certificate Services.
- En plus d'une sauvegarde complète, on effectue également des sauvegardes incrémentielles régulières de la base de données CA.
- Les sauvegardes incrémentielles échouent avec le message d'erreur "The database missed a previous full backup before incremental backup".
Incremental database backup for…
Backing up Log files: 0%CertUtil: -backupDB command FAILED: 0xc8000230 (ESE: -560 JET_errMissingFullBackup)
CertUtil: The database missed a previous full backup before incremental backup
Connaissez-vous TameMyCerts? TameMyCerts est un add-on pour l'autorité de certification Microsoft (Active Directory Certificate Services). Il étend la fonction de l'autorité de certification et permet de Application de la réglementationIl s'agit d'un logiciel de gestion des certificats qui permet d'automatiser l'émission de certificats en toute sécurité. TameMyCerts est unique dans l'écosystème Microsoft, a déjà fait ses preuves dans d'innombrables entreprises du monde entier et est disponible sous une licence libre. Il peut téléchargé via GitHub et être utilisé gratuitement. Une maintenance professionnelle est également proposée.
L'information sur la dernière fois qu'une sauvegarde complète a été effectuée est stockée à deux endroits :
- Dans la base de données du registre du service d'autorité de certification sous HKLM:\CurrentControlSet\Services\CertSvc\Configuration\ dans la valeur "DBLastFullBackup".
- Dans les données d'en-tête de la base de données de l'autorité de certification.
Le moyen le plus simple d'obtenir cette information à partir de l'enregistrement du service d'autorité de certification est d'exécuter la commande suivante :
certutil -getreg DBLastFullBackup
exemple :
certutil -getreg DBLastFullBackup
DBLastFullBackup REG_BINARY = 19.12.2018 20:00
On obtient l'information de la base de données de l'autorité de certification avec une commande esentutl qui donne les informations d'en-tête :
esentutl /mh {Pfad-zur-Zertifizierungsstellen-Datenbank}.edb
Il faut noter que le service d'autorité de certification doit être arrêté pour cela, sinon esentutl ne peut pas accéder à la base de données et s'interrompt avec l'erreur suivante :
Operation terminated with error -1032 (JET_errFileAccessDenied, Cannot access file, the file is locked or in use) after 0.16 seconds.
Si la commande a été exécutée avec succès, nous regardons la section "Previous Full Backup".
exemple :
esentutl /mh "C:\Windows\System32\CertLog\ADCSLabor Root CA.edb"
Previous Full Backup:
Log Gen: 167-189 (0xa7-0xbd) - OSSnapshot
Mark: (0xBE,1,0)
Mark: 12/19/2018 22:16:49.142
Dans le cas présent, on voit que les valeurs du registre et de la base de données des autorités de certification sont différentes. Dans la zone "Log Gen", on voit en outre que la dernière sauvegarde complète a été effectuée par un instantané du système d'exploitation (OSSnapshot). Des entrées correspondantes se trouvaient également dans l'observateur d'événements de la machine :

Il s'est avéré que l'autorité de certification en question était installée sur une machine virtuelle et qu'en plus de la sauvegarde scriptée, elle était également sauvegardée au moyen d'un instantané de la machine virtuelle.

Comme la base de données de l'autorité de certification est informée par le système d'exploitation des copies de l'ombre du volume (Volume Shadow Copy), cet instantané est enregistré comme la dernière sauvegarde réussie.
Il s'agit d'une fonction de la base de données Extensible Storage Engine (ESE), dont le service d'autorité de certification n'a cependant pas connaissance. C'est pourquoi les deux valeurs sont maintenant différentes. Certutil tente en vain d'effectuer un incrément par rapport à la dernière sauvegarde scriptée.
La solution consiste à coordonner les deux processus de sauvegarde de sorte que la sauvegarde complète scriptée de la base de données de l'autorité de certification n'ait lieu qu'une fois que l'instantané de la machine virtuelle a déjà été effectué, et que les sauvegardes incrémentielles s'arrêtent avant que l'instantané suivant ne soit effectué.
Habituellement, les machines virtuelles sont sauvegardées l'une après l'autre, de sorte qu'il n'est jamais possible de garantir exactement quand ce sera le tour de l'autorité de certification, c'est pourquoi cette fenêtre de temps doit être largement planifiée.