Der Preis (derzeit 59 USD) wird für die Validierung fällig und das geht alles recht flott. Danach kann man ein Zertifikat erstellen welches zwei Jahre lang gültig ist.
So, und da alle Tutorials immer von den PFX-Dateien ausgehen, welche man signtool.exe füttert, hier die kurze Anleitung wie das Signieren auch ohne die PFX-Datei geht. Ich beziehe mich hier auf das Tutorial von Stefan (Grolle) und andere Tutorials. Hier nochmal der Link:
http://blog.stefangöppert.de/?page_id=275
Außerdem ist diese Methode mal sicherer (siehe Hinweis ganz unten) und erklärt vielleicht auch jenen die nicht StartSSL benutzen die Hintergründe und Zusammenhänge der verschiedenen Dateien und Formate.
Ich setze hier mal voraus, daß man zuvor die Validierung durchführen lassen hat.
1.) Privaten Schlüssel und CSR (certificate signing request) mit OpenSSL erstellen. Hat man einen privaten Schlüssel, kann man auch einen existierenden benutzen.
Code:
openssl req -new -newkey rsa:4096 -keyout key.pem -out csr.pem
Hinweis: die Details sind irrelevant. Nur der öffentliche Schlüssel der im CSR mitgeschickt wird, wird auch von StartSSL benutzt. Sprich, man kann die Vorgaben von OpenSSL übernehmen. Die Daten aus der Validierung werden stattdessen benutzt. Ja, das schließt die folgenden Felder ein: E (Email), CN (Common Name, also euer Name), L (Location, also Stadt), S (State, also Bundesland) und C (Country, also Staat). Soweit ich es sehen kann ist die Telefonnummer und die exakte Adresse nicht enthalten, die man aber während der Validierung angeben muß.
2.) Unter "Object Code Signing" im zweiten Tab im "Control Panel" bei StartSSL den Inhalt des CSR einfügen und abschicken (siehe Link oben).
3.) Am Ende dieses Schrittes bekommt man das von StartSSL signierte Zertifikat in einem Textfeld. Dieses Zertifikat speichert man nun in einer Datei, bspw.: cert.crt
Bei Verisign (jetzt Symantec) war dies beim letzten Mal ein Download. Wenn ich mich recht entsinne, brauchte ich auch die Zwischenformate irgendwie nicht. Ist aber schon zwei Jahre her. Ich kann evtl. im Herbst nochmal schreiben wie das heute dort läuft.
4.) Nun benutzt man das Tool cert2spc.exe aus dem Windows
SDK um das Zertifikat in eine SPC-Datei zu konvertieren:
Code:
cert2spc.exe cert.crt cert.spc
5.) Nun benutzt man
pvktool um den privaten Schlüssel in eine PVK-Datei zu konvertieren (neuere OpenSSL-Versionen sollen diese Funktionalität auch von Haus aus bieten, hab's aber nicht probiert). Um pvktool zu kompilieren mußte ich aber "-ldl" in der Make-Datei anfügen, damit die "Dynamic Loader" Bibliothek von Linux mit eingelinkt wird. Ansonsten gibt's Linkerfehler (zumindest zusammen mit dem aktuellsten OpenSSL 1.0.0d).
Code:
pvk -in key.pem -topvk -strong -out key.pvk
6.) Jetzt benutzt man das Tool pvk2pfx.exe aus dem Windows
SDK um die SPC und PVK zu einer PFX zusammenzuführen.
Code:
pvk2pfx.exe -spc cert.spc -pvk key.pvk -pfx cert.pfx
Hinweis: cert.pfx enthält jetzt die "Credentials" (also den privaten Schlüssel) und das Zertifikat. Ab hier kann man es genauso benutzen wie es in den vielen Tutorials beschrieben wird. Oder man nimmt die letzte Hürde.
7.) Man kann nun die PFX in den "Certificate Store" des Computers oder des aktuellen Benutzers importieren.
Aktueller Benutzer:
Code:
certutil -user -importPFX cert.pfx
Computer:
Code:
certutil -importPFX cert.pfx
So und ab hier kann man jetzt ganz bequem das installierte Zertifikat benutzen.
Hat man es für den Computer installiert, benutzt man "/sm":
Code:
signtool.exe sign /v /a /sm /ph /d "..." /du "http://..." /tr http://www.startssl.com/timestamp my.exe
Hat man es für den aktuellen Benutzer installiert, läßt man es weg:
Code:
signtool.exe sign /v /a /ph /d "..." /du "http://..." /tr http://www.startssl.com/timestamp my.exe
- /v steht für verbose und wird nicht benötigt. Ist aber sinnvoll beim ersten Mal. So sieht man welches Zertifikat gewählt wurde (nächster Punkt).
- /a wählt automatisch das am längsten gültige Zertifikat aus, welches für "Code Signing" tauglich ist. Meist ist ohnehin nur ein Zertifikat auf dem Rechner installiert.
- /ph erstell Hashes über die einzelnen Sektionen der EXE (sicherer)
- /d fügt eine Beschreibung hinzu - wird meines Wissens nach nirgends später angezeigt.
- /du siehe /d, ist aber eine URL.
- /t oder /tr ist die URL eines Timestamp-Servers. Das ist SEHR SEHR WICHTIG. Wenn ihr das nicht benutzt, läuft sowohl das Zertifikat als auch die damit erstellte Signatur einer EXE ab. Wenn ihr es benutzt, läuft die Signatur nicht ab, da der Dienst garantiert, daß vor Ablauf signiert wurde ...
- /ac muß für Treiber benutzt werden um die Ausstellerzertifikate ebenso in die Binärdatei einzufügen.
- /i und /n und /r können benutzt werden um das korrekte Zertifikat auszuwählen, sollte mehr als eines installiert sein.
Den Timestamp-Service
sollte man immer jeweils vom Aussteller her benutzen. Rein prinzipiell könnte es auch gemischt gehen.
Hinweis: man kann auch die Schritte bis zur Erstellung der PFX über StartSSL machen, dann muß man aber die Passphrase zu seinem privaten Schlüssel an die weitergeben. Benutzt man bspw. einen existierenden Schlüssel ist dies schlecht. Daher läßt man das lieber und benutzt den oben beschriebenen Weg, wenn man's sicher mag.