Den Signaturalgorithmus einer Zertifizierungsstellen-Hierarchie ändern, ohne neue Zertifizierungsstellen-Zertifikate auszustellen

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:

MethodeBeschreibung
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 ZertifikateIn 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

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.

Zertifikatdazugehöriges Signaturzertifikat
StammzertifizierungsstelleDas eigene Zertifizierungsstellen-Zertifikat
Untergrordnete ZertifizierungsstelleDas 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.

Beispiel: Zertifizierungsstellen-Zertifiat vor Umstellung von PKCS#1 Version 2.1 auf 1.5
Beispiel: Zertifizierungsstellen-Zertifiat vor Umstellung nach PKCS#1 Version 2.1 auf 1.5

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:

Ein Gedanke zu „Den Signaturalgorithmus einer Zertifizierungsstellen-Hierarchie ändern, ohne neue Zertifizierungsstellen-Zertifikate auszustellen“

Kommentare sind geschlossen.