Zertifikat nach Loeschung wiederherstellen

Zertifikat nach Löschung wiederherstellen

Gelöschtes Zertifikat und Private-Key restaurieren

Wer über die MMC aus Versehen ein Zertifikat gelöscht hat, der kann das gelöschte Zertifikat mithilfe eines Administrators wiederherstellen. Der Private-Key (Maschinenschlüssel) bleibt nach der versehentlichen Löschung des Zertifikats erhalten.

Zertifikat nach Löschung wiederherstellen

Warum ist das so?

Der private Schlüssel wird getrennt vom öffentlichen Schlüssel auf dem System vorgehalten. Bei der Löschung wird lediglich der öffentliche Teil des Paares gelöscht und der liegt in der Registry.

Wobei der private Teil des Paares unter einem dieser Pfade zu finden ist und erhalten bleibt.

  • CNG Schlüssel
    • %ALLUSERSPROFILE%\Microsoft\Crypto\SystemKeys
    • %ALLUSERSPROFILE%\Anwendungsdaten\Microsoft\Crypto\RSA\S-1-5-18
  • RSA Schlüssel
    • %APPDATA%\Microsoft\Crypto\Keys
    • %APPDATA%\Microsoft\Crypto\RSA\UserSID

Beispiel: Wie lautet der Container meines Private-Keys?

Zertifikat nach Löschung wiederherstellen

Gelöschtes Zertifikat und Private-Key restaurieren

Speicher abfragen Benutzer:

certutil -user -viewstore My
certutil -user -store My

Speicher abfragen Computer:

certutil -viewstore My
certutil -store My

SID abfragen:

wmic useraccount get name,sid

Zur Demonstration werde ich dieses Zertifikat löschen und die Workstation neu starten.

Gelöschtes Zertifikat und Private-Key restaurieren

Das einzige was wir für die Restauration benötigen, ist die Anforderungs-ID des Zertifikats. Wenn der Benutzer diese nicht kennt, kann der Admin aushelfen.

Zertifikat Anforderungs-ID

Der Admin kehrt zurück zur Maschine des betroffenen Benutzers und zieht sich von der Zertifizierungsstelle zuerst den öffentlichen Schlüssel ab. Meine CA hat den gleichen Namen wie der Windows Server.

Dazu setzt der Admin diesen Befehl ab:

certreq -config “SRVSUBCA\SRVSUBCA” -retrieve 257 cert.cer

Retrieve Certificate from CA

Als nächstes wird der öffentliche Schlüssel (Public-Key) importiert oder installiert.

Install Certificate in local store

Jetzt müssen wir nur noch den Maschinen-Key mit dem öffentlichen Schlüssel verheiraten.

Und dazu reparieren wir den Zertifikatsspeicher und setzten diesen Befehl ab. Für die Reparatur benötigten wir lediglich den Fingerabdruck (Thumbprint) des Zertifikat.

certutil -user -repairstore MY ae6d7ae41479b16b63000a9ad979aa2cc9b5f628

Zertifikat exportieren obwohl es als "nicht exportierbar" gekennzeichnet ist

Das Zertifikat inkl. privatem Schlüssel sind wieder zugänglich und einsatzbereit.

Zertifikat exportieren obwohl es als “nicht exportierbar” gekennzeichnet ist

Nicht exportierbares Zertifikat auf eine anderen Maschine übertragen

# Container anhand des Fingerabdrucks des Zertifkat ermitteln
$Cert = Get-Item Cert:\CurrentUser\My\c05c7af6bf720d55d9f0253a0548b3b4f67b2dd1
$Cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName

# Kopieren den Maschinenschlüssel der übertragen werden soll, lokal nach C:\Temp:
copy “C:\Users\JoernWalter\AppData\Roaming\Microsoft\Crypto\RSA\S-1-12-1-3748701331-1077845691-3600150455-1848382034\3a913cfa725737c03e12670115537240_71bb3c72-6465-41ab-aabc-9e2e87120624″ c:\Temp

## Kopieren den zu übertragenden Maschinenschlüssel sowie den Public-Key auf den anderen neuen Computer, ebenfalls nach C:\Temp

# Ermitteln die MachineGUID des neuen Computers
Get-ItemPropertyValue Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\ -Name MachineGuid
# Die MaschinenGUID lautet: 3db398ac-e8d2-4ece-8a0c-44e26cf9140e

# Benennen den ersten Teil des Maschinenschlüssels um
# Aus 3a913cfa725737c03e12670115537240_71bb3c72-6465-41ab-aabc-9e2e87120624
# Wird 3db398ac-e8d2-4ece-8a0c-44e26cf9140e_71bb3c72-6465-41ab-aabc-9e2e87120624

# Kopieren den umbenannten Maschinenschlüssel in das lokale Verzeichnis des neuen Computers:
copy “C:\Temp\3db398ac-e8d2-4ece-8a0c-44e26cf9140e_71bb3c72-6465-41ab-aabc-9e2e87120624” C:\Users\JoernWalter\AppData\Roaming\Microsoft\Crypto\RSA\S-1-12-1-3748701331-1077845691-3600150455-1848382034

## Importieren den Public-Key in den lokalen Zertifikatspeicher des Benutzers

# Fügen durch die Repairfunktion den privaten und öffentlichen Schlüssel zusammen
certutil -user -repairstore MY c05c7af6bf720d55d9f0253a0548b3b4f67b2dd1