Mitunter kann es erforderlich sein, den Signaturalgorithmus einer bereits installierten Zertifizierungsstellen-Hierarchie nachträglich zu ändern.
Häufig ist dies der Fall, weil man diese mit PKCS#1 Version 2.1 installiert hat und im Nachgang leider feststellen muss, dass nicht alle Anwendungen zu den daraus entstehenden Zertifikaten kompatibel sind, und die Hierarchie somit nicht verwenden können.
Ist es noch relativ einfach, den Signaturalgorithmus für die von einer Zertifizierungsstelle ausgestellten Zertifikate nachträglich zu ändern, wird es bei den Zertifizierungsstellen-Zertifikaten schon schwieriger.
Es bieten sich folgende Vorgehensweise an, um den Signaturalgorithmus der Zertifizierungsstellen-Hierarchie nachträglich zu verändern:
Methode | Beschreibung |
---|---|
Neuinstallation der Zertifizierungsstellen-Hierarchie. | Dies ist die "sicherste" aller Optionen, da garantiert keine Altlasten entstehen, allerdings auch diejenige mit dem größtenn Aufwand. Außerdem müssen neue Schlüsselpaare generiert werden. |
Umstellung des Signaturalgorithmus auf allen Zertifizierungsstellen und Erneruerung aller Zertifikate. | In diesem Fall muss, beginnend ab der Stammzertifizierungsstelle eine Erneuerung aller Zertifikate erfolgen. |
Umstellung des Signaturalgorithmus auf allen Zertifizierungsstellen und Neu-Signierung der vorhandenen Zertifikate | In diesem Fall wird keine Erneuerung der Zertifizierungsstellen-Zertifikate vorgenommen, sondern die aktuellen Zertifikate erhalten lediglich eine neue Signatur |
Details: Umstellung des Signaturalgorithmus auf allen Zertifizierungsstellen und Neu-Signierung der vorhandenen Zertifikate
Kennen Sie TameMyCerts? TameMyCerts ist ein Add-On für die Microsoft Zertifizierungsstelle (Active Directory Certificate Services). Es erweitert die Funktion der Zertifizierungsstelle und ermöglicht die Anwendung von Regelwerken, um die sichere Automatisierung von Zertifikat-Ausstellungen zu realisieren. TameMyCerts ist einzigartig im Microsoft-Ökosystem, hat sich bereits in unzähligen Unternehmen auf der ganzen Welt bewährt und steht unter einer freien Lizenz. Es kann über GitHub heruntergeladen und kostenlos verwendet werden. Professionelle Wartung wird ebenfalls angeboten.
Die folgende Vorgehensweise ist sehr komplex und kann dazu führen, dass bei falscher Anwendung die Zertifizierungsstellen-Hierarchie unbrauchbar wird. Aus diesem Grund sollte einer der beiden zuvor genannten Methoden der Vorzug gegeben werden, sofern dies möglich ist.
Die nachfolgenden Schritte müssen, beginnend ab der Stammzertifizierungsstelle, für alle Zertifizierungsstellen in der Hierarchie wiederholt werden.
Im folgenden Beispiel wird der Signaturalgorithmus einer Zertifizierungsstellen-Hierarchie von PKCS#1 Version 2.1 auf PKCS#1 Version 1.5 geändert. Der Prozess funktioniert jedoch auch in die andere Richtung, wenn die verwendeten Befehle entsprechend angepasst werden.
Die Vorgehensweise teilt sich in die folgenden Unterschritte auf:
- Erstellen einer Sicherung (Backup) der Zertifizierungsstelle.
- Beenden des Zertifizierungsstellen-Dienstes.
- Ändern des Signaturalgorithmus in der Registry.
- Ändern des Signaturalgorithmus in der capolicy.inf.
- Exportieren des bisherigen Zertifizierungsstellen-Zertifikats in eine Datei.
- Erneutes Signieren des Zertifizierungsstellen-Zertifikats unter Verwendung des gewünschten Signaturalgorithmus.
- Austausch des Zertifizierungsstellen-Zertifikats gegen die neu signierte Version.
- Wiederherstellen der Verbindung zwischen Zertifizierungsstellen-Zertifikat und privatem Schlüssel.
- Anpassen der Zertifizierungsstellen-Konfiguration, um das neu signierte Zertifizierungsstellen-Zertifikat zu verwenden.
- Starten des Zertifizierungsstellen-Dienstes.
- Ausstellen einer neuen Zertifikatsperrliste.
- Aktualisieren der Sperrlistenverteilungspunkte und des Zugriffs auf Stelleninformationen.
- Die Verteilung des neuen Stammzertifizierungsstellen-Zertifikats sicherstellen.
Erstellen einer Sicherung (Backup) der Zertifizierungsstelle
Bevor Änderungen an der Zertifizierungsstelle vorgenommen werden, sollte in jedem Fall eine Sicherung des aktuellen Zustands erfolgen. Die Vorgehensweise zur Erstellung einer Sicherung der Zertifizierungsstelle ist im Artikel "Eine Sicherung (Backup) einer Zertifizierungsstelle erstellen" beschrieben.
Beenden des Zertifizierungsstellen-Dienstes
Um die Änderung durchführen zu können, muss der Zertifizierungsstellen-Dienst beendet werden. Dies kann mit folgendem Kommandozeilebefehl erfolgen:
net stop certsvc
Ändern des Signaturalgorithmus in der Registry
Der folgende Kommandozeilenbefehl ändert den Signatualgorithmus für von der Zertifizierungsstelle ausgestellte Zertifikate auf PKCS#1 Version 1.5:
certutil -delreg CA\CSP\AlternateSignatureAlgorithm
Ändern des Signaturalgorithmus in der capolicy.inf
Während der Installation einer Zertifizierungsstelle wird der Signaturalgorithmus üblicherweise über die Konfigurationsdatei im Windows-Verzeichnis konfiguriert. Diese Datei sollte in jedem Fall angepasst werden. Bei Stammzertifizierungsstellen wird diese Direktive außerdem für die Erneuerung des eigenen Zertifizierungsstellen-Zertifikats herangezogen, sodass das Unterlassen der Anpassung zu Folgefehlern führen wird.
Die capolicy.inf befindet sich im Windows-Verzeichnis (üblicherweise C:\Windows).
Der Wert "AlternateSignatureAlgorithm=1" muss auf "AlternateSignatureAlgorithm=0" geändert werden.
Exportieren des bisherigen Zertifizierungsstellen-Zertifikats in eine Datei
Als nächstes muss das aktuelle Zertifizierungsstellen-Zertifikat neu signiert werden. Hierzu muss es als Datei vorliegen. Es wird darum aus dem lokalen Zertifikatspeicher exportiert. Dies erfolgt über die Managementkonsole für Zertifikate im Computer-Zertifikatspeicher (certlm.msc).
Das Zertifikat wird über die Option "All Tasks" – "Export" im Kontextmenü exportiert.
Der private Schlüssel wird zu diesem Zeitpunkt noch nicht benötigt, sodass er nicht mit exportiert werden muss.
Das verwendete Dateiformat ist letzendlich nicht entscheidend. Die Standard-Vorauswahl kann beibehalten werden.
Das Zertifikat sollte nun an eine Stelle exportiert werden, von welcher aus es zum erneuten signieren aus verwenden kann.
Erneutes Signieren des Zertifizierungsstellen-Zertifikats unter Verwendung des gewünschten Signaturalgorithmus
Das Zertifikat wird nun unter Verwendung des dazugehörigen SIgnaturschlüssels neu signiert.
Zertifikat | dazugehöriges Signaturzertifikat |
---|---|
Stammzertifizierungsstelle | Das eigene Zertifizierungsstellen-Zertifikat |
Untergrordnete Zertifizierungsstelle | Das Zertifizierungsstellen-Zertifikat der jeweils übergeordneten Zertifizierungsstelle |
Für den Wechsel von PKCS#1 Version 2.1 auf PKCS#1 Version 1.5 wird folgender Kommandozeilenbefehl verwendet:
certutil -sign {Zertifikat-Alt} {Zertifikat-Neu} -AlternateSignatureAlgorithm
Für den Wechsel von PKCS#1 Version 1.5 auf PKCS#1 Version 2.1 wird folgender Kommandozeilenbefehl verwendet:
certutil -sign {Zertifikat-Alt} {Zertifikat-Neu} +AlternateSignatureAlgorithm
Man wird zur Auswahl des Signaturzertifikats aufgefordert.
Wurde das korrekte Signaturzertifikat verwendet, wird entsprechend Erfolg angezeigt.
Vergleicht man das alte Zertifikat mit dem neuen, sollte man feststellen, dass die Seriennummer beider Zertifikate identisch ist, sich jedoch der Signaturalgorithmus wie angegeben unterscheidet.
Austausch des Zertifizierungsstellen-Zertifikats gegen die neu signierte Version
Nun wird das vorige Zertifizierungsstellen-Zertifikat aus dem Zertifikatspeicher gelöscht und gegen das neue Zertifikat ausgetauscht.
Der private Schlüssel des Zertifikats bleibt bei der Löschung erhalten, es besteht kein Grund zur Beunruhigung.
Über die Managementkonsole für Zertifikate im Computer-Zertifikatspeicher (certlm.msc) wird das Zertifikat gelöscht.
Anschließend wird das neue Zertifizierungsstellen-Zertifikat in den gleichen Zertifikatspeicher ("Local Computer" – "Personal" – "Certificates") importiert.
Die Standard-Einstellung ("Personal") ist zutreffend.
Auf einer Stammzertifizierungsstelle muss das Zertifikat auf gleichem Wege auch noch im Speicher "Trusted Root Certification Authorities" ausgetauscht werden.
Wiederherstellen der Verbindung zwischen Zertifizierungsstellen-Zertifikat und privatem Schlüssel
Nach dem Import des neuen Zertifizierungsstellen-Zertifikats fällt auf, dass es angeblich nicht über den privaten Schlüssel verfügt.
Der private Schlüssel ist noch vorhanden, jedoch noch nicht mit dem neuen Zertifikat verknüft.
Wird ein Softwareschlüssel eingesetzt, ist es ausreichend, den Befehl mit einem Benutzerkonto auszuführen, welches über lokale Administrator-Berechtigungen auf der Zertifizierungsstelle verfügt. Wird ein Hardware Security Modul (HSM) verwendet, kann es notwendig sein, dass man den Befehl im Kontext des lokalen SYSTEM Kontos ausführen muss, was beispielsweise mit psexec oder einem geplanten Task erreicht werden kann.
Mit folgendem Kommandozeilenbefehl wird die Verbindung zwischen dem neuen Zertifikat und dem vorhandenen privatem Schlüssel hergestellt:
certutil -repairstore My {Thumbprint-neues-Zertifkat}
Anschließend sollte der private Schlüssel angezeigt werden.
Anpassen der Zertifizierungsstellen-Konfiguration, um das neu signierte Zertifizierungsstellen-Zertifikat zu verwenden
Nun, da das neue Zertifizierungsstellen-Zertifikat erfolgreich importiert und wieder mit dem privaten Schlüssel verbunden wurde, muss die Zertifizierungsstelle über die Änderung informiert werden. Hierzu wird der Wert CACertHash bearbeitet, der sich in folgendem Registry-Pfad befindet:
HKLM\System\CurrentControlSet\Services\CertSvc\Configuration\{Common-Name-der-Zertifizierungsstelle}
Der Thumbprint des vorigen Zertifizierungsstellen-Zertifikats wird gegen den des neu signierten ausgetauscht. Bitte beachten, dass die Leerzeichen beibehalten werden.
Sollte der Zertifizierungsstellen-Dienst nun nicht starten, siehe Artikel "Der Zertifizierungsstellen-Dienst startet nicht und wirft die Fehlermeldung "The parameter is incorrect. 0x80070057 (WIN32: 87 ERROR_INVALID_PARAMETER)".
Starten des Zertifizierungsstellen-Dienstes
Nun kann der Zertifizierungsstellen-Dienst gestartet werden. Beispielsweise mit folgendem Kommandozeilenbefehl:
net start certsvc
Nacharbeiten
Folgende Nacharbeiten müssen noch erledigt werden:
- Ausstellen einer neuen Zertifikatsperrliste. Siehe Artikel "Erstellen und Veröffentlichen einer Zertifikatsperrliste".
- Aktualisieren der Sperrlistenverteilungspunkte und des Zugriffs auf Stelleninformationen. Das neue Zertifizierungsstellen-Zertifikat und die neu erzeugte Sperrliste müssen an ihre Veröffentlichunsorte kopiert werden. Sie ersetzen hierbei die bereits vorhandenen Dateien.
- Die Verteilung des neuen Stammzertifizierungsstellen-Zertifikats sicherstellen. Das neue Stammzertifizierungsstellen-Zertifikat muss den Teilnehmern bekannt gemacht werden, und der Vertrauensstatus muss hergestellt werden. Die Verteilung des Stammzertifizierungsstellen-Zertifikats kann hierbei über den Public Key Services Container im Active Directory, oder per Gruppenrichtlinien erfolgen. Es ersetzt hierbei das vorige veröffentlichte Stammzertifizierungsstellen-Zertifikat.
Weiterführende Links:
- Grundlagen: Schlüsselalgorithmen, Signaturalgorithmen und Signaturhashalgorithmen
- PKCS#1 Version 2.1 für eine Stammzertifizierungsstelle (Root CA) einsetzen (eigenes und ausgestellte Zertifikate)
- PKCS#1 Version 2.1 für ausgestellte Zertifikate und Sperrlisten einer Zertifizierungsstelle konfigurieren
Ein Gedanke zu „Den Signaturalgorithmus einer Zertifizierungsstellen-Hierarchie ändern, ohne neue Zertifizierungsstellen-Zertifikate auszustellen“
Kommentare sind geschlossen.