Sicherung der Zertifizierungsstelle

Sicherung der Zertifizierungsstelle

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 Zertifizierungsstelle 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
  • Sicherung der Ereignisprotokolle
  • Sicherung der veröffentlichten Zertifikatsvorlagen

Die Datenbank kann zusammen mit dem privaten Schlüssel der CA entweder über die GUI oder per Skript gesichert werden.

Sicherung der Zertifizierungsstelle

Beim Erstellen einer Sicherung, bitte immer ein komplexes Kennwort vergeben.

Zertifikatsdatenbank und Zertifikatsdatenbankprotokoll

Die erforderlichen Informationen finden wir in der Registry unter diesem Pfad. Der ganze Schlüssel Configuration ist zu exportieren.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration

Backup CA Registry

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

CAPolicy.inf sichern

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

Powershell Backup CA

Die Registry-Einstellungen der CA exportieren

Invoke-Command {reg export ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration’ C:\BackupCA\CertSvc.reg}

oder per Remote über eine sichere Verbindung

Invoke-Command -ComputerName SRVSUBCA {reg export ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration’ C:\BackupCA\CertSvc.reg} -UseSSL

Sichern der Policy.inf
$Path = “\\SecureServer\BackupCA
Copy-Item $Env:windir\CAPolicy.inf -Destination $Path -Force -ErrorActionSilentlyContinue

Sichern der Ereignisprotokolle
wevtutil export-log Security “C:\BackupCA\EventLog_Security.evtx”

Sichern der veröffentlichten Zertifikate
Get-CATemplate | Foreach-Object { $_.Name } | Out-File -FilePath “C:\BackupCA\CATemplates.txt” –Encoding String –Force

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.

Certutil Backup CA

Optional: Das öffentliche Zertifikate sowie die Zertifikatskette

certutil -ca.cert “C:\BackupCA\CAcert.cer”
certutil -ca.chain “C:\BackupCA\CAchain.p7b”

Backup CA Certificate

Die Registry-Einstellungen der CA exportieren

reg export HKLM\System\CurrentControlSet\Services\CertSvc\Configuration C:\BackupCA\Configuration.reg

Backup Certificate Configuration Registry

Sichern der veröffentlichen Zertifikatvorlagen

certutil -catemplates > “C:\BackupCA\CAvorlagen1.txt”
certutil -v -template > C:\BackupCA\CAvorlagen2.txt”

Backup published CA templates

Sichern der CAPolicy.inf. Diese Datei enthält grundlegende Konfigurationseinstellungen der CA.

copy C:\Windows\CAPolicy.inf C:\BackupCA

CAPolicy.inf sichern

Sichern der Ereignisprotokolle
wevtutil export-log Security “C:\BackupCA\EventLog_Security.evtx”

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 Zertifikatsvorlagen per Remote wieder zu Verfügung stellen möchte, der setzte diesen Befehl ein. Bei mir heißt der Server wie die CA SRVSUBCA.

certutil -config SRVSUBCA\SRVSUBCA -SetCaTemplates +CodeSHA256,RDPAuth,Kerberos,Exchange,DCs,WEB,WEBSHA256

Restore published Certificates

Den Dienst starten

net start certsvc

Restore der Zertifizierungsstelle per Powershell

Den Dienst stoppen

Stop-Service CertSvc

Import der Datenbank

Restore-CARoleService -Path C:\BackupCA -DatabaseOnly -force

Die Registry-Einstellungen der CA wieder importieren

Invoke-Command {reg import ‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CertSvc’ C:\BackupCA\CertSvc.reg}

Den Dienst starten

Start-Service CertSvc

Migration einer Zertifizierungsstelle

Bevor eine Zertifizierungsstelle den Server wechseln kann, muss die alte Zertifizierungsstelle deinstalliert werden.

Remove-WindowsFeature ADCS-Web-Enrollment; Remove-WindowsFeature ADCS-Cert-Authority -IncludeManagementTools

Wer eine Enterprise\SubordinateCA migrieren möchte, der kann die CA Rolle auf dem neuen Server installieren, und den zuvor gesicherten Private-Key bei der Installation direkt mit angeben. Danach einfach die CMD Befehle zur Wiederherstellung ausführen.

Das CMDLet Install-AdcsCertificationAuthority steht erst nach der Installation der CA-Rolle zur Verfügung.

Install-WindowsFeature AD-Certificate

Install-AdcsCertificationAuthority -CAType EnterpriseSubordinateCA -CertFile “C:\BackupCA\SRVSUBCA.p12” -CertFilePassword (Read-Host “Sicherungskennwort” -AsSecureString)

Optionales

Zertifikatvorlagen per Powershell wieder veröffentlichen oder manuell bereitstellen.

$templates = “CodeSHA256″,”RDPAuth”,”Kerberos”,”Exchange”,”DCs”,”WEB”,”WEBSHA256″
foreach ($i in $templates){
Add-CATemplate -Name $i -Force
}

PKI – Commandline certutil