Seit Mitte 2023 werden Code Signing Zertifikate ausschließlich auf FIPS 140-2-zertifizierter Hardware ausgeliefert. Der Bezug eines Zertifikats mittels eines "Signing Request" ist daher leider nicht mehr möglich, auch wenn die Mehrkosten erheblich sind.
Vor einigen Jahren war die israelische Firma StartSSL ein günstiger Anbieter von Code Signing Zertifikaten. Nach mehreren Unregelmäßigkeiten bei der Erstellung von Zertifikaten und Firmenübernahmen wurde StartSSL im Jahr 2016 sukzessive das Vertrauen entzogen. In der Folge musste StartSSL den Betrieb einstellen.
Letzte Woche schrieb ich einen Artikel über die günstigen Zertifikate der israelischen Firma StartSSL. Eine Rückmeldung lautete wörtlich: „HÄ?“ (Hinweis: Der Artikel wurde bereits 2016 entfernt!)
Zugegeben, das Erstellen von Zertifikaten generell, oder Code Signing im speziellen ist nicht ganz so einfach. Daher folgt hier ein Kochkurs: Wie backe ich ein Code Signing Certificate?
Die Zutaten: Eine Kreditkarte mit $50 Guthaben und eine lauffähige Installation von OpenSSL.
Diese Anleitung nimmt auf den nicht mehr existierenden Anbieter StartSSL Bezug. Da die Verifikation bei jedem Anbieter unterschiedlich abläuft, müssen Sie diesen Vorgang selber in Erfahrung bringen.
Schritt 1: Anmeldung bei StartSSL und Durchführung der Zertifizierung gemäß „StartSSL™ Verified„
Sie benötigen für diesen Vorgang zwei der folgenden drei Dokumente als Scan:
- Personalausweis (Vorder- und Rückseite)
- Reisepass (Alle Seiten)
- Führerschein (Alle Seiten)
Außerdem benötigen Sie eine auf Ihren Namen ausgestellte Telefonrechnung. Die Durchführung der Registrierung auf StartSSL.com überlasse ich dem Leser als Übungsaufgabe.
Schritt 2: Erstellen des Zertifikats
Das Code Signing Certificate besteht aus einen privaten und einem öffentlichen Schlüssel. Es ist unbedingt notwendig, den privaten Schlüssel vollständig und unter allen Umständen geheimzuhalten. Aus diesem Grunde müssen wir das Schlüsselpärchen auf unserem Computer berechnen und den Schlüssel von StartSSL signieren lassen, was quasi einer Unterschrift gleichkommt. Öffnen Sie eine Konsole und wechseln Sie in das OpenSSL-Verzeichnis. Alternativ tut es auch, aus Bequemlichkeitsgründen, ein Webserver mit Shellzugang.
Als Kennwörter sollten Sie grundsätzlich sehr sichere Kennwörter verwenden, ein Mix aus 20 Buchstaben, Zahlen und ein oder zwei Sonderzeichen sollte genügen. Sollte Ihre Datei abhanden kommen, kann sie mißbraucht werden, um schädliche Software unter Ihrem Namen in Umlauf zu bringen.
openssl genrsa -des3 -out codesign.key 4096
openssl req -new -key codesign.key -out codesign.csr
Codesign.key enthält nun das Zertifikat und in codesign.csr findet sich der „Code Signing Request“, also die Aufforderung an die Zertifizierungsbehörde StartSSL, unser Zertifikat zu unterschreiben. Denn: An StartSSL können wir unsere codesign.key ja nicht schicken, denn in dem Moment wäre sie ja zumindest theoretisch bekannt.
Ich gehe nun davon aus, daß Sie aus dem ersten Schritt noch bei StartSSL angemeldet sind und sich in Ihrem Control Panel befinden.
Rufen Sie den Certificate Wizard auf und wählen Sie als Option (Drop-Down Liste): Object Code Signing Certificate (beta). Im nächsten Bild kopieren Sie den Inhalt der Datei „codesign.csr“ in das Eingabefeld. Sie erhalten als Dankeschön eine Ausgabedatei, zum Beispiel „codesign.crt“, die das öffentliche Zertifikat darstellt.
Schritt 3: Kombinieren von öffentlichem und privatem Schlüssel für den Signaturvorgang
In der Konsole:
openssl pkcs12 -export -out codesign.pfx -inkey codesign.key -in codesign.crt
Es entsteht eine Datei codesign.pfx, die durch das Microsoftsche Tool „signtool.exe“ verwendet werden kann. Für den eigentlichen Signaturvorgang (hier als Beispiel möchten wie eine Datei „software.exe“ signieren.
signtool.exe sign /f Codesign.pfx /p <IHRKENNWORT> /tr „http://www.startssl.com/timestamp“ software.exe
Durch die Verwendung von /tr „http://www.startssl.com/timestamp“
als Parameter wird das jetzige Datum und die Uhrzeit durch StartSSL.com signiert und in die ausführbare Datei geschrieben. Der Sinn liegt darin, daß eine Datei auch dann gültig signiert sein soll, wenn das verwendete Zertifikat abgelaufen ist – solange nur der Signaturvorgang innerhalb des Gültigkeitszeitraums des Zertifikats durchgeführt wurde. Dies funktioniert zur Zeit leider nicht, da StartSSL keine Revocation-Server bereithält und Microsoft daher darauf besteht, die Timestamp-Funktion nicht anzuwenden! Siehe weiter unten im Text!
Achtung! StartSSL hat den Betrieb eingestellt. Welchen Time-Server Sie verwenden müssen, erfahren Sie vom Aussteller Ihres Zertifikats.
Worauf Sie nun achten müssen: Die Dateien „codesign.key“ und „codesign.pfx“ sind als unantastbar zu betrachten. Sie enthalten den nicht-öffentlichen, geheimen Schlüssel. Daher ist es wirklich notwendig, sichere Kennwörter zu verwenden.
StartSSL hat den Betrieb eingestellt. Welchen Time-Server Sie verwenden müssen, erfahren Sie vom Aussteller Ihres Zertifikats.