Zum Inhalt

47-Tage-Zertifikate sind im Anmarsch. Sind Sie bereit?

Jetzt handeln →

Signieren Sie mit Jarsigner und der PKCS#11-Bibliothek

Jarsigner

Veröffentlicht: März 2025 | Aktualisiert: August 2026

Die Signierung mit Jarsigner und PKCS#11 bedeutet, dass das in Java integrierte Tool jarsigner zum Signieren von JAR-, WAR-, EAR- und SAR-Dateien verwendet wird, während der private Schlüssel in einem Hardware-Sicherheitsmodul (HSM) oder Token anstatt in einem Software-Schlüsselspeicher verbleibt. Der PKCS#11-Wrapper von EC ermöglicht die Kommunikation von jarsigner mit dem HSM unter Windows, Ubuntu und macOS.

Die Codesignierung ist ein entscheidender Prozess in der Softwareentwicklung, der die Authentizität und Integrität von Anwendungen sicherstellt und sie vor Manipulation und unautorisierten Änderungen schützt. Um diesen Prozess zu optimieren, bietet die PKCS#11- Bibliothek von Encryption Consulting eine leistungsstarke Lösung für die Codesignierung mit Jarsigner auf verschiedenen Betriebssystemen, darunter Windows, Linux (Ubuntu) und macOS.

Jarsigner

Das im Java Development Kit (JDK) enthaltene Tool Jarsigner bietet einen robusten Mechanismus zum digitalen Signieren von Dateien und ist damit ein unverzichtbares Tool für Java-Entwickler, die Anwendungen auf verschiedenen Plattformen verteilen.

Es ist hilfreich, die unten genannten Dateitypen zu signieren:

  • .Krug: Java-Archivdateien, bei denen es sich um allgemeine Archive für Java-Klassen und -Ressourcen handelt.  
  • .Ohr: Enterprise-Archivdateien, die zum Verpacken von Java EE-Unternehmensanwendungen verwendet werden.  
  • .Krieg: Web Application Archive-Dateien, die zum Verpacken von Java-Webanwendungen verwendet werden.  
  • .sar: Servicearchivdateien, die zum Verpacken von Diensten in einigen Java EE-Umgebungen verwendet werden.

Ubuntu, Windows und macOS: Ein kurzer Vergleich

Bevor wir uns mit den plattformspezifischen Schritten befassen, hier ein kurzer Überblick über die Unterschiede zwischen den drei Setups.

AspektUbuntuWindowsmacOS
Getestete BetriebssystemversionUbuntu 24.02Windows 11 23H2Sequoia 15.2
Wrapper-Abhängigkeitenliblog4cxx12, curlNichts weiter als die Verpackung selbstliblog4cxx, curl (via Homebrew)
installierte Java-VersionJava 17Java 22Java 17
Java-Installationsmethodeapt install openjdk-17-jdkOracle .exe-Installationsprogrammbrew install openjdk@17
Shell-Konfiguration für JAVA_HOME~/.bashrcPATH-Umgebungsvariable (GUI)~/.zshrc or ~/.bash_profile

Konfiguration des PKCS#11 Wrappers unter Ubuntu

Voraussetzungen:

Bevor wir uns den Signiervorgang mit dem Jarsigner-Tool und unserem PKCS11-Wrapper auf einer Linux-Maschine (Ubuntu) ansehen, stellen Sie sicher, dass Folgendes bereit ist:

  • Ubuntu-Version:Ubuntu Version 22.04 oder höher (getestete Umgebung ist Ubuntu 24.02)  
  • Abhängigkeiten:Installieren Sie liblog4cxx12 und curl. 

Um die Abhängigkeiten zu installieren, führen Sie die folgenden Befehle aus

  • sudo apt-get installieren locken 
  • sudo apt-get installiere liblog4cxx12 

Installieren des PKCS#11-Wrappers von EC 

Schritt 1: Gehen Sie in EC CodeSign Secure v3.02 zum Abschnitt „Signierungstools“ und laden Sie den PKCS#11 Wrapper für Ubuntu herunter.

EC-Signaturtools

Schritt 2: Generieren Sie anschließend ein P12-Authentifizierungszertifikat über das Dropdown-Menü System Setup > Benutzer > Authentifizierungszertifikat generieren.

P12-Authentifizierungszertifikat

Schritt 3: Gehen Sie zu Ihrem Ubuntu-Clientsystem und bearbeiten Sie die Konfigurationsdateien ( ec_PKCS#11client.ini und PKCS#11properties.cfg ), die im PKCS#11 Wrapper heruntergeladen wurden.

Konfigurationsdateien Ubuntu bearbeiten

Installieren Sie Java auf Ihrem Ubuntu-Computer.

Sie müssen außerdem Java (Java 8-17) auf Ihrem Ubuntu-Computer installieren, damit Jarsigner mit unserem PKCS11-Wrapper funktioniert.

Schritt 1: Installieren Sie Java 17 auf Ihrem Ubuntu-Rechner.

sudo apt installiere openjdk-17-jdk

Java-Befehl installieren

Schritt 2: Java 17 als aktive Version festlegen

sudo update-alternatives –config java

aktive Version festlegen

Schritt 3: Überprüfen Sie, ob Java ordnungsgemäß installiert wurde.

Java-Version

Java-Version prüfen

Schritt 4: Java 17 als aktive Version festlegen.

Ausführen: nano ~/.bashrc

Fügen Sie nach dem Ausführen des obigen Befehls diese Zeilen am Ende der Datei hinzu:

export JAVA_HOME=

export PATH=$JAVA_HOME/bin:$PATH

Setzen Sie die aktive Version von Java17

Drücken Sie Strg + X, dann Y zur Bestätigung und dann die Eingabetaste zum Speichern.

Schritt 5: Laden Sie die bashrc-Datei neu.

Ausführen: source ~/.bashrc

Schritt 6: Prüfen Sie, ob die Variable gesetzt wurde.

echo $JAVA_HOME

Wenn nicht, öffnen Sie ein neues Terminal und versuchen Sie es erneut.

Unterzeichnung

Schritt 1: Wechseln Sie im Terminal in den Ordner, der Ihre Dateien „ec_pkcs11client.ini“ und „pkcs11properties.cfg“ enthält.

Arbeitsverzeichnis ändern

Schritt 2: Führen Sie den Signierbefehl aus diesem Verzeichnis aus.

-keystore KEINE -storepass KEINE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg -signiertes Glas -tsa http://timestamp.digicert.com

Nachfolgend finden Sie einen Beispielbefehl:

jarsigner -keystore KEINE -storepass KEINE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg pkcs11properties.cfg -signedjar helloworld_signed.jar helloworld.jar gpg2 -tsa http://timestamp.digicert.com

Verification

Schritt 1: Führen Sie zur Überprüfung folgenden Befehl aus:

-verifizieren -certs -verbose

Schritt 2: Nachfolgend finden Sie einen Beispielbefehl:

jarsigner -verify helloworld_signed.jar -certs -verbose

Konfiguration des PKCS#11-Wrappers unter Windows

Voraussetzungen:

Bevor wir uns mit der Verwendung des Jarsigner-Tools und unseres PKCS11-Wrappers auf einem Windows-Computer befassen, stellen Sie sicher, dass Folgendes bereit ist:

  • Windows Version: Windows 11 (getestete Umgebung ist Windows 11 23H2) 

Installieren des PKCS#11-Wrappers von EC 

Schritt 1: Gehen Sie in EC CodeSign Secure v3.02 zum Abschnitt „Signierungstools“ und laden Sie den PKCS#11 Wrapper für Windows herunter.

Fenster des EC-Signaturtools

Schritt 2: Generieren Sie anschließend ein P12-Authentifizierungszertifikat über das Dropdown-Menü System Setup > Benutzer > Authentifizierungszertifikat generieren.

P12-Authentifizierungszertifikat

Schritt 3: Gehen Sie zu Ihrem Windows-Clientsystem und bearbeiten Sie die im PKCS#11 Wrapper heruntergeladenen Konfigurationsdateien ( ec_PKCS#11client.ini und PKCS#11properties.cfg ).

Konfigurationsdateien bearbeiten
Konfigurationsdateien bearbeiten

Installieren Sie Java auf Ihrem Windows-Computer

Sie müssen außerdem Java (Java 8-22) auf Ihrem Windows-Computer installieren, damit Jarsigner mit unserem PKCS11-Wrapper funktioniert.

Schritt 1: Installieren Sie Java 22 (.exe-Installationsprogramm) von der offiziellen Oracle- Website auf Ihrem Windows-Rechner.

Java-Windows installieren

Schritt 2: Folgen Sie den Anweisungen, um Java 22 auf Ihrem Rechner zu installieren.

Java-Installationsschritte
Java-Installationsschritte

Schritt 3: Legen Sie Java 22 als aktive Version fest, indem Sie den Bin-Pfad in der PATH-Variablen speichern.

Java als aktive Version festlegen

Unterzeichnung

Schritt 1: Wechseln Sie im Terminal in den Ordner, der Ihre Dateien „ec_pkcs11client.ini“ und „pkcs11properties.cfg“ enthält.

Arbeitsverzeichnis ändern

Schritt 2: Führen Sie den Signierbefehl aus diesem Verzeichnis aus.

-keystore KEINE -storepass KEINE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg -signiertes Glas -tsa http://timestamp.digicert.com

Nachfolgend finden Sie einen Beispielbefehl:

jarsigner -keystore KEINE -storepass KEINE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg pkcs11properties.cfg -signedjar helloworld_signed.jar helloworld.jar gpg2 -tsa http://timestamp.digicert.com

Verification

Schritt 1: Führen Sie zur Überprüfung folgenden Befehl aus:

-verifizieren -certs -verbose

Schritt 2: Nachfolgend finden Sie einen Beispielbefehl:

jarsigner -verify helloworld_signed.jar -certs -verbose

Konfiguration des PKCS#11 Wrappers unter MacOS

Voraussetzungen:

Bevor wir uns mit der Verwendung des Jarsigner-Tools und unseres PKCS11-Wrappers auf einem MacOS-Computer befassen, stellen Sie sicher, dass Folgendes bereit ist:

  • MacOS-Version: Sequoia 15.2 (getestete Umgebung Sequoia 15.2) 
  • Abhängigkeiten:Installieren Sie liblog4cxx und curl. 

Um die Abhängigkeiten zu installieren, führen Sie die folgenden Befehle aus

  • brew installieren curl
  • brew install log4cxx

Installieren des PKCS#11-Wrappers von EC 

Schritt 1: Gehen Sie in EC CodeSign Secure v3.02 zum Abschnitt „Signierungstools“ und laden Sie den PKCS#11 Wrapper für MacOS herunter.

EC-Signaturtools für Mac

Schritt 2: Generieren Sie anschließend ein P12-Authentifizierungszertifikat über das Dropdown-Menü System Setup > Benutzer > Authentifizierungszertifikat generieren.

P12-Authentifizierungszertifikat

Schritt 3: Gehen Sie zu Ihrem MacOS-Clientsystem und bearbeiten Sie die im PKCS11 Wrapper heruntergeladenen Konfigurationsdateien ( ec_PKCS#11client.ini und PKCS#11properties.cfg ).

Konfigurationsdatei bearbeiten

Installieren Sie Java auf Ihrem MacOS-Computer.

Sie müssen außerdem Java (Java 8-17) auf Ihrem MacOS-Computer installieren, damit Jarsigner mit unserem PKCS11-Wrapper funktioniert.

Schritt 1: Installieren Sie Java 17 auf Ihrem MacOS-Rechner.

brew install openjdk@17

Schritt 2: Ermitteln Sie den Installationsort von Java 17 auf Ihrem Computer.

Brew-Informationen an openjdk@17

Schritt 3: Java 17 als aktive Version festlegen.

Für Zsh: nano ~/.zshrc

Für Bash: nano ~/.bash_profile

Fügen Sie nach dem Ausführen des obigen Befehls diese Zeilen hinzu:

export PATH= :$PFAD

export JAVA_HOME=

Java als aktiv festlegen

Schritt 4: Umgebungsvariablen neu laden

Für Zsh: source ~/.zshrc

Für Bash: source ~/.bash_profile

Unterzeichnung

Schritt 1: Wechseln Sie im Terminal in den Ordner, der Ihre Dateien „ec_pkcs11client.ini“ und „pkcs11properties.cfg“ enthält.

Schritt 2: Führen Sie den Signierbefehl aus diesem Verzeichnis aus.

-keystore KEINE -storepass KEINE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg -signiertes Glas -tsa http://timestamp.digicert.com

Nachfolgend finden Sie einen Beispielbefehl:

jarsigner -keystore KEINE -storepass KEINE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg pkcs11properties.cfg -signedjar helloworld_signed.jar helloworld.jar gpg2 -tsa http://timestamp.digicert.com

Verification

Schritt 1: Führen Sie zur Überprüfung folgenden Befehl aus:

-verifizieren -certs -verbose

Schritt 2: Nachfolgend finden Sie einen Beispielbefehl:

jarsigner -verify helloworld_signed.jar -certs -verbose

Enterprise Code-Signing-Lösung

Holen Sie sich mit unserer Code-Signing-Lösung eine Lösung für alle Ihre kryptografischen Software-Code-Signing-Anforderungen.

Häufig gestellte Fragen

Was ist Jarsigner und welche Dateitypen kann es signieren?

Jarsigner ist ein im Java Development Kit (JDK) enthaltenes Codesignatur-Tool. Es signiert Java-Archivdateien (.jar), Enterprise-Archivdateien (.ear), Webanwendungsarchivdateien (.war) und Service-Archivdateien (.sar).

Warum sollte man PKCS#11 mit Jarsigner anstelle eines standardmäßigen Java-Keystores verwenden?

Eine herkömmliche Java-Keystore-Datei speichert den privaten Schlüssel auf der Festplatte, wodurch dieser bei Kompromittierung des Dateisystems gestohlen werden kann. PKCS#11 ermöglicht es Jarsigner, den Signiervorgang an ein Hardware-Sicherheitsmodul oder einen Token zu delegieren, sodass der private Schlüssel vollständig in Hardware generiert, gespeichert und verwendet und niemals exportiert wird.

Welche Java-Version benötige ich, um Jarsigner mit dem PKCS#11-Wrapper von EC auszuführen?

Alle Java-Versionen von 8 bis 17 funktionieren unter Ubuntu und macOS, Java 8 bis 22 unter Windows. Die dokumentierte Einrichtung verwendet Java 17 unter Ubuntu und macOS und Java 22 unter Windows.

Warum verwendet die Windows-Installation Java 22, während Ubuntu und macOS Java 17 verwenden?

Beide Versionen liegen innerhalb des von diesem Wrapper unterstützten Java-8-22-Bereichs und funktionieren daher auf allen drei Plattformen. Falls in Ihrer Umgebung teamübergreifend eine einheitliche Java-Version verwendet wird, stellen Sie sicher, dass diese Version vom unterstützten Bereich Ihres Betriebssystems abgedeckt wird, bevor Sie vom dokumentierten Beispiel abweichen.

Wie lautet der genaue jarsigner-Befehl zum Signieren mit dem PKCS11-Provider?

Der Kernbefehl lautet: jarsigner -keystore NONE -storepass NONE -storetype PKCS11 -sigalg SHA256withRSA -providerClass sun.security.pkcs11.SunPKCS11 -providerArg pkcs11properties.cfg -signedjar <output file> <input file> <key alias> -tsa http://timestamp.digicert.comFühren Sie den Befehl aus dem Ordner aus, der die Konfigurationsdateien Ihres Wrappers enthält. Die Vorgehensweise ist unter Ubuntu, Windows und macOS identisch.

Wie kann ich überprüfen, ob eine JAR-Datei korrekt signiert wurde?

Führen Sie jarsigner -verify <signed file> -certs -verboseHierbei wird die Signatur anhand des Hashwerts der Datei überprüft und die Zertifikatsdetails angezeigt, die zum Signieren verwendet wurden.

Warum enthält der Beispielbefehl einen -tsa-Zeitstempelserver?

Das -tsa Ein Flag-Vermerk bestätigt, dass das Signaturzertifikat zum Zeitpunkt der Signierung gültig war. Ohne diesen Vermerk ist die Vertrauenswürdigkeit der Signatur an die Gültigkeitsdauer des Zertifikats gebunden, sodass die signierte JAR-Datei mit Ablauf des Zertifikats als nicht vertrauenswürdig gilt, selbst wenn sich sonst nichts geändert hat.

Welche Version von CodeSign Secure enthält aktuell diesen PKCS#11-Wrapper?

CodeSign Secure v3.02, das neben der Unterstützung für jsign und jarsigner auch native LMS- und ML-DSA-Post-Quantum-Signierung, GPG2-Integration und Debian/RPM-Paketsignierung hinzufügte.

Wie schützt CodeSign Secure den Signaturschlüssel über das hinaus, was der PKCS#11-Wrapper selbst leistet?

Neben der Weiterleitung der Signierung über ein HSM mittels PKCS#11 bietet CodeSign Secure zusätzlich clientseitiges Hashing, Virenprüfung des Artefakts vor der Signierung, detaillierte Protokollierung jedes Signierungsereignisses und die Durchsetzung von Richtlinien darüber, wer was signieren darf. All dies bietet die einfache jarsigner/PKCS#11-Befehlszeile allein nicht.

Fazit

CodeSign Secure von Encryption Consulting hebt die Codesignierung auf ein neues Niveau. Die umfassende Plattform optimiert nicht nur den Signierungsprozess, sondern stärkt auch die Sicherheit von Organisationen erheblich. Dank fortschrittlicher Funktionen wie der Integration von Hardware-Sicherheitsmodulen , clientseitigem Hashing und Virenscans gewährleistet CodeSign Secure den Schutz der Signaturschlüssel und schützt signierte Anwendungen vor Malware. Dieser Schutz gewinnt jährlich an Bedeutung: Laut dem GitGuardian-Bericht „State of Secrets Sprawl 2026“ wurden allein im Jahr 2025 28.65 Millionen neue, fest codierte Geheimnisse auf öffentlichen GitHub-Plattformen offengelegt – ein Anstieg von 34 % gegenüber dem Vorjahr. Sonatype identifizierte in seinem Bericht vom 28. Januar 2026 über 454,600 neue schädliche Open-Source-Pakete für das Jahr 2025 – ein Anstieg von 75 % gegenüber dem Vorjahr. Genau diese Art von Ökosystemrisiko muss ein Workflow zur JAR-Signierung abwehren.

CodeSign Secure lässt sich nahtlos in CI/CD-Pipelines integrieren und ist damit ideal für Unternehmen, die ihre Entwicklungsprozesse automatisieren und skalieren und gleichzeitig strenge Sicherheitsrichtlinien einhalten möchten. Dank detaillierter Prüfprotokolle und konsequenter Richtliniendurchsetzung bietet es Transparenz und Nachvollziehbarkeit und unterstützt Unternehmen so bei der Erfüllung von Compliance-Anforderungen und dem Aufbau von Vertrauen bei ihren Nutzern.

Durch die nahtlose Integration mit Jarsigner vereinfacht die PKCS#11-Bibliothek von Encryption Consulting die Konfiguration und Ausführung von Signaturaufgaben und bietet plattformunabhängig ein konsistentes und sicheres Erlebnis. Ob Sie unter Windows entwickeln, unter Ubuntu bereitstellen oder unter macOS testen – diese Bibliothek ermöglicht es Entwicklern, hohe Sicherheitsstandards bei minimaler Komplexität einzuhalten.