Zum Inhalt springen

Kochrezept: Code Signing Certificate von StartSSL

Letzte Woche schrieb ich einen Artikel über die günstigen Zertifikate der israelischen Firma StartSSL. Eine Rückmeldung lautete wörtlich: „HÄ?“

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.

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:

  1. Personalausweis (Vorder- und Rückseite)
  2. Reisepass (Alle Seiten)
  3. 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 drei: 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!

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.

Hat es geklappt?

Sie können die korrekte Signatur im Dialogfenster „Eigenschaften“ mit einem Rechtsklick auf die signierte Datei überprüfen.

Ich wünsche viel Spaß beim coden!

CodeSigningStartSSL_ok.jpg

SSL Lifetime Signing

Ein Leser teilt mir folgendes mit:

"Code Signing Zertifikate von StartSSL (Class 2 und Class 3) sind wertlos, da sie in der EKU die „Lifetime Signing“ OID gesetzt haben, d.h. das Time-Stamping funktioniert nicht. Das merkt man erst, wenn das Zertifikat abgelaufen ist und dann ist der Ärger groß…

Mich hat’s umgehauen, mit welcher Dreistigkeit die ein nutzloses Produkt anbieten!

Googled mal „StartSSL Lifetime Signing“"

Die Aussage des Lesers ist korrekt. Die mit dem StartSSL signierten Softwareprodukte sind ausdrücklich nur bis zum Ablauf des Zertifikates lauffähig - danach lösen sie eine Zertifikatswarnung aus! Nach Aussage von StartSSL verlangt Microsoft Bürgschaften zum Betrieb eines Revocation-Servers, der auch nach einer eventuellen Insolvenz von StartSSL betrieben werden müßte; ein Aufwand, den StartSSL leider nicht zu erbringen bereit ist.

Dennoch halte ich die Zertifikate nicht für unnütz. In unserer schnellebigen Softwarelandschaft werden Produkte häufiger als nur alle 1-2 Jahre aktualisiert. Es ist dem Programmierer zuzumuten, jährlich zumindest ein Programmupdate an den Kunden zu bringen, eventuell über einen automatischen Update-Mechanismus.

Daß Webseiten nach Ablauf eines Zertifikates ebensolche Warnungen auswerfen ist allgemein akzeptiert. Dadurch, daß die Code Signing Zertifikate nach 2 Jahren auslaufen und der Kunde jedes Jahr ein neues Zertifikat ordern kann, müssen die Server lediglich 2 Jahre weiterbetrieben werden. Ein bis zwei Jahre sind aber genug Zeit, sich ein langfristig gültiges Zertifikat zu beschaffen.