Derzeit keine.

Fragen und Antworten zum Code-Signing mit Zertifikaten aus der DFN-PKI

1. Was ist Code-Signing und Object-Signing?

Code-Signing oder auch Object-Signing ist das Signieren von Programm- oder Skript-Code, um dessen Integrität und Authentizität sicherzustellen. Welche Programme oder Skripte signiert werden können und welche Werkzeuge verwendet werden müssen, hängt von der dazugehörigen Umgebung ab.
Code-Signing gibt es für Java Applets, Java Web-Start-Applikationen, Microsoft Office Macros, VBScript bzw. Powershell-Skripte, Windows Treiber, Android Apps und viele weitere.

2. Welche Code-Signing Umgebungen unterstützt die DFN-PKI?

In der DFN-PKI wird Java Code-Signing im Sicherheitsniveau „Global” voll unterstützt.

Microsoft Windows Code-Signing (egal für welchen Einsatzzweck) wird nicht direkt unterstützt, da das Wurzelzertifikat der DFN-PKI „Global” in Microsoft Windows für diesen Zweck nicht freigeschaltet ist. Weitere Hinweise finden Sie unter Punkt 5.

Android Apps werden insbesondere für den Google Play Store mit selbst-signierten Zertifikaten signiert, die direkt durch die Entwicklerwerkzeuge generiert werden. Daher gibt es keine Notwendigkeit, hierfür die DFN-PKI zu verwenden. Weitere Erläuterungen finden Sie unter Punkt 6.

3. Wie wird ein Code-Signing Zertifikat beantragt?

Code-Signing-Zertifikate können folgendermaßen über die CA Ihrer Einrichtung bezogen werden:

  • Beantragen Sie das Code-Signing Zertifikat mit Ihrem Webbrowser über den Antragsweg „Pseudonym-Zertifikat”. Wählen Sie als Pseudonym im Zertifikat „<Vorname Nachname> - CodeSigning”, und verwenden Sie gegebenenfalls eine rollenbasierte E-Mail-Adresse. Wir empfehlen, das Zertifikat nicht veröffentlichen zu lassen. Merken Sie sich beim Speichern der .json-Datei (inkl. des im Browser erzeugten privaten Schlüssels) das von Ihnen vergebene Passwort sehr gut, denn Sie benötigen dieses zum späteren Abholen des ausgestellten Zertifikats.

  • Teilen Sie Ihrem Teilnehmerservice bei Abgabe des unterschriebenen Papier-Antrages mit, dass Sie ein Code-Signing Zertifikat benötigen, damit der Teilnehmerservice das korrekte Zertifikatsprofil setzen kann.

  • Nach der Ausstellung des Code-Signing Zertifikats erhalten Sie eine E-Mail. Folgen Sie der Anleitung in der E-Mail, um das neue Zertifikat abzuholen und speichern Sie die PKCS#12-Datei (.p12) mit dem Zertifikat und dem privaten Schlüssel möglichst auf einem externen, nicht dauerhaft an Ihren Rechner angeschlossenen Medium wie einen USB-Stick. Wählen Sie dabei ein starkes Passwort.

4. Wie wird ein Code-Signing Zertifkat für das Signieren von Java-Code verwendet?

Zum Signieren von Java-Code werden die Werkzeuge keytool und jarsigner benötigt, die im Java SDK enthalten sind. Wir empfehlen die Verwendung von Schlüsseln in PKCS#12-Dateien (siehe voriger Abschnitt), da die Arbeit mit dem nativen Java-Keystore (über das Werkzeug „keytool”) komplizierter und fehleranfälliger ist.
Bevor Sie eine PKCS#12-Datei zum Signieren verwenden können, müssen Sie den Parameter „<Alias>” in Erfahrung bringen. Hierzu verwenden Sie den folgenden Befehl

 

keytool -list -keystore <PKCS#12-Datei> -storetype pkcs12

 

Sie erhalten die folgende Ausgabe, in der Sie vor dem Zertifikat-Fingerprint den Alias finden:

 

Keystore-Typ: PKCS12
Keystore-Provider: SunJSSE

Keystore enthält 1 Eintrag

<Alias>, 20.02.2015, PrivateKeyEntry,
Zertifikat-Fingerprint (SHA1): 48:B5:50:C5:18:48:9E:29:59:30:B2:1C:7A:A0:15:7E:CF:85:46:93

 

Das Signieren erfolgt mit folgendem Aufruf:

 

jarsigner -tsa zeitstempel.dfn.de -keystore <PKCS#12-Datei> -storetype pkcs12 <Zu signierendes JAR> '<Alias>'

 

Optional kann, entgegen teilweise anzutreffender Dokumentation, ein Proxy für den Zeitstempelserver angegeben werden. Die zusätzlichen Parameter hierfür sind:

 

-J-Dhttp.proxyHost=<ProxyHost> -J-Dhttp.proxyPort=<ProxyPort>

 

Online-Resourcen zum Thema finden sich unter folgenden Links:

http://www.oracle.com/technetwork/java/javase/tech/java-code-signing-1915323.html

http://docs.oracle.com/javase/8/docs/technotes/guides/deploy/manifest.html#A1148525

5. Was ist beim Code-Signing in Microsoft Windows zu beachten?

Das Wurzel-Zertifikat der DFN-PKI Global "T-TeleSec GlobalRoot Class 2" ist im Windows-Zertifikatsspeicher nicht für den Zertifikats­zweck "Codesignatur" freigeschaltet.

Obwohl es technisch nicht vollkommen ausgeschlossen ist, die Zertifikate der DFN-PKI „Global” für Code-Signing unter Windows zu verwenden, empfehlen wir dies nicht.

Damit Windows-Systeme die Code-Signing-Zertifikate der DFN-PKI als solche akzeptieren, muss im Windows-eigenen Zertifikatmanager in den Eigenschaften des "T-TeleSec GlobalRoot Class 2" Zertifikats der Zertifikatszweck "Codesignatur" aktiviert werden.

Diese Änderung kann auf jedem betroffenen Windows-System manuell durchgeführt werden. Da Microsofts Auto-Update-Mechanismen diese manuell gemachte Einstellung unserer Erfahrung nach sporadisch (ohne erkennbares Muster) zurücksetzen, wird nicht empfohlen, dieses Vorgehen zu wählen.

Diese Einstellung kann darüber hinaus über eine Windows-Gruppenrichtlinie an alle Mitglieder einer vorhandenen Windows-Domäne verteilt werden. In diesem Fall wird die Einstellung nicht automatisch zurückgesetzt. Für Windows-Systeme, die nicht Mitglied in einer entsprechenden zentral verwalteten Windows-Domäne sind, ist dieses Vorgehen allerdings nicht möglich.

Vorsicht mit automatischen kritischen Prozessen, die diese signierten Programme/Skripte/Macros benutzen und ggf. nicht mehr laufen, falls sich der Zertifikatszweck (unbemerkt) zurückgesetzt hat.

6. Was ist beim Code-Signing von Android Apps für Google Play zu beachten?

Obwohl es technisch nicht vollkommen ausgeschlossen ist, die Zertifikate der DFN-PKI „Global” für Code-Signing unter Android zu verwenden, empfehlen wir dies nicht.

Zum Signieren von Android Apps für Google Play werden selbst-signierte Zertifikate mit einer sehr langen Laufzeit verwendet. Diese selbst-signierten Zertifikate werden üblicherweise direkt von den Android Entwicklertools erzeugt.

Das Zertifikat hat bei Android keine Sicherheitsfunktion bzgl. Identifizierung. Das Signieren und die Verwendung von Zertifikaten dient ausschließlich dazu, Updates sicher zu einer Ursprungs-App zurück zu verfolgen, und nicht, um den Entwickler zu identifizieren. Die Nutzung von Zertifikaten aus einer PKI bringt daher keine Vorteile. Die Verwendung von selbst-signierten Zertifikaten ist, wenn auch ungewohnt, sicherheitstechnisch angemessen.

Wie man sich ein selbst-signiertes Zertifikat mit Android Studio erzeugt, ist auf der folgenden Seite beschrieben:

http://developer.android.com/tools/publishing/app-signing.html#studio

 

     aktualisiert am: 11.05.2021 |