Backup Certificate Authority
Für den Notfall sollte man die Sicherung der Zertifizierungsstelle manuell einmal oder auch gerne öfter durchgeführt und sicher in einem Tresor abgelegt haben.
Die Sicherung der CA sollte folgende Informationen bzw. Daten enthalten.
- Datenbank der CA
- Zertifikat mit privatem Schlüssel
- Konfigurationsdaten aus der Registry
- Individuelle Sperrlistenverteilpunkte (Webserver oder File-Share)
- Individuelle DNS-Einträge
- Informationen zu den installierten Diensten wie z.B. CEP oder OCSP
- CAPolicy.inf von der Erstinstallation
Die Datenbank kann zusammen mit dem privaten Schlüssel der CA entweder über die GUI oder per Skript gesichert werden.
Beim erstellen einer Sicherung, bitte immer ein komplexes Kennwort vergeben.
Die erforderlichen Informationen finden wir in der Registry unter diesem Pfad. Der ganze Schlüssel CertSvc ist zu exportieren.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc
Die individuellen Sperrlistenverteilpunkte sollten in der Dokumentation zu finden sein, die nach der Erstinstallation erstellt wurde 😉
DNS-Einträge sollten ebenfalls in der Dokumentation stehen, ebenso die zusätzlich eingerichteten Dienste.
Die CAPolicy.inf finden wir in der Regel noch immer unter C:\Windows
Backup der CA per Powershell
Die Zertifizierungsstelle lässt sich auch mittels der Powershell oder CMD sichern.
Diese Befehle sichern entweder die Datenbank inkl. privatem Schlüssel, oder nur die Datenbank oder nur den privaten Schlüssel. Keiner dieser Befehle setzt ein Kennwort auf das Backup.
Backup-CARoleService -Path “C:\BackupCA”
Backup-CARoleService -Path “C:\BackupCA” -DatabaseOnly
Backup-CARoleService -Path “C:\BackupCA” -KeyOnly
Die Registry-Einstellungen der CA exportieren
Invoke-Command {reg import ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc’ C:\BackupCA\CertSvc.reg}
oder per Remote über eine sichere Verbindung
Invoke-Command -ComputerName SRVSUBCA {reg export ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc’ C:\BackupCA\CertSvc.reg} -UseSSL
Sichern der Policy.inf
$Path = “\\SecureServer\BackupCA
Copy-Item $Env:windir\CAPolicy.inf -Destination $Path -Force -ErrorActionSilentlyContinue
Backup der CA per CMD
certutil –backupDB C:\BackupCA
certutil –backupKey C:\BackupCA
Beim sichern des Schlüssels wird ein Kennworteingabe erwartet aber nicht erzwungen.
Optional: Das öffentliche Zertifikate sowie die Zertifikatskette
certutil -ca.cert “C:\BackupCA\CAcert.cer”
certutil -ca.chain “C:\BackupCA\CAchain.p7b”
Die Registry-Einstellungen der CA exportieren
reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration Configuration.reg
Sichern der veröffentlichen Zertifikatvorlagen
certutil -catemplates > “C:\BackupCA\CAvorlagen1.txt”
certutil -v -template > C:\BackupCA\CAvorlagen2.txt”
Sichern der CAPolicy.inf
copy C:\Windows\CAPolicy.inf C:\BackupCA
Restore der Zertifizierungsstelle per CMD
Den Dienst stoppen
net stop certsvc
Import der Datenbank
certutil -f -restoredb C:\BackupCA
Importieren des Registry-Key Configuration.reg. Handelt es sich um eine neuen Server, so muss der Reg-Key entsprechend angepasst werden.
reg import C:\BackupCA Configuration.reg
Zertifikatvorlagen wieder veröffentlichen. Dazu fügt man die Vorlagen kommagetrennt hinter das + ein. Wer eine veröffentlichte Vorlagen wieder zurückziehen möchte der ersetzt das + Zeichen gegen ein – Zeichen.
certutil -setcatemplates +CodeSHA256,RDPAuth,Kerberos,Exchange,DCs,WEB,WEBSHA256
Wer die Vorlagen per Remote wieder zu Verfügung stellen möchte. Bei mir heißt der Server wie die CA.
certutil -config SRVSUBCA\SRVSUBCA -SetCaTemplates +CodeSHA256,RDPAuth,Kerberos,Exchange,DCs,WEB,WEBSHA256
Den Dienst starten
net start certsvc
Migration einer Zertifizierungsstelle
Wer eine CA migrieren möchte oder muss, der kann die CA Rolle installieren und den zuvor gesicherten Private-Key bei der Installation direkt mit angeben. Danach einfach die CMD Befehle zur Wiederherstellung ausführen.
Install-AdcsCertificationAuthority -CAType EnterpriseSubordinateCA -CertFile “C:\BackupCA\SRVSUBCA.p12” -CertFilePassword (Read-Host “Sicherungskennwort” -AsSecureString)
Optionales
Zertifikatvorlagen per Powershell wieder veröffentlichen
$templates = “CodeSHA256″,”RDPAuth”,”Kerberos”,”Exchange”,”DCs”,”WEB”,”WEBSHA256″
foreach ($i in $templates){
Add-CATemplate -Name $i -Force
}