Jak podepisovat Java aplikace a applety

17. 4. 2018 | Jindřich Zechmeister

Java je považována za málo důvěryhodnou platformu. Má stále problémy s velkým počtem zranitelností a podpis Java aplikace či appletu naprosto zásadní pro důvěru cílového uživatele. V tomto článku najdete postup, jak zažádat o certifikát pro podpis Java appletů a jak ho začít využívat.

K čemu slouží certifikáty pro podpis aplikací

Stejně jako ostatní certifikáty slouží Code Signing certifikáty pro zvýšení bezpečnosti; nepoužívají se však pro komunikaci mezi prohlížečem a serverem, ale pro digitální podpis aplikací. Použití certifikátu se podobá elektronickému podpisu, jak ho známe z e-mailové komunikace.

Hlavní význam podpisu kódu je následující:

  1. Prokázání původu aplikace a identity vydavatele
  2. Prokázání nenarušení kódu při přenosu k uživateli

Stejně jako u elektronického podpisu je třeba jednat prokázat identitu vydavatele, abychom si mohli být jistí, že software nepochází z nedůvěryhodného zdroje. Stejně tak důležitá je kontrola integrity dat, tedy jejich úplnosti a neměnnosti. Díky digitálnímu podpisu aplikace se můžeme přesvědčit o tom, že aplikaci nikdo po vydání nezměnil. Pro uživatele vaší aplikace je podpis zárukou, že program pochází od vás a nikdo ho po vydání nezměnil.

Jaký je přínos Code Signing certifikátu pro Javu?

Zmínil jsem obecné vlastnosti a výhody certifikátu pro podpis kódu. Krom výše uvedených výhod vám certifikát pro podpis Java aplikací umožňuje:

  • podpis Jar souborů pro desktopové platformy.
  • používá hešovací algoritmus Secure Hash Algorithm SHA-1 a volitelně i pokročilejší SHA 2.
  • kompatibilita s Runtime Environment (JRE).
  • uživateli prokáže původ a bezpečnost kódu, pomůže snížit počet varovných hlášek

Java je považována za málo důvěryhodnou platformu. Má stále problémy s velkým počtem zranitelností (o kterých vás pravidelně informují v týdeníku Týden v bezpečnosti), je podpis Java aplikace či appletu naprosto zásadní pro důvěru cílového uživatele.

Jak zažádat certifikát pro Javu

Krom samotného objednání certifikátu pro podpis kódu na SSLmarketu je třeba vyřešit i kryptografické aspekty, jako je CSR request a privátní klíč.

Po podepisování Java aplikací a appletů budete potřebovat JDK (Java Development Kit) distribuovaný Oraclem. Pro práci s certifikátem a k podpisu budete potřebovat programy keytool, jar, a jarsigner z tohoto balíku.

Vytvoření Keystore a privátního klíče

Před vygenerováním žádosti o certifikát, což je veřejný klíč, potřebujete vytvořit váš klíč privátní. Provedete to příkazem

keytool -genkey -keyalg rsa -keystore -alias -keysize 3072

Keystore vás vyzve k jeho pojmenování, vytvoření jeho aliasu a hesla pro keystore. Zeptá se i na název vaší společnosti.

Dvojice klíčů je po vytvoření uložena v Keystore a privátní klíč v žádném případě nikam neposílejte.

Nyní vytvořte CSR request, který je potřeba pro objednávku certifikátu. Budete vyzvání k zadání upřesňujících informací.

keytool -certreq -file certreq.csr -keystore -alias

Vytvořený CSR request vložte do objednávky Code Signing certifikátu na SSLmarketu.

Jak s certifikátem podepisovat

Import certifikátu do Keystore

Autorita po ověření vaší společnosti certifikát vydá a obdržíte ho od SSLmarketu e-mailem. Před použitím je třeba ho naimportovat do vašeho keystore příkazem:

keytool -import -trustcacerts -keystore -alias -file cert.p7b

Upozorňuji, že importovaný P7B soubor není námi zaslaný Intermediate certifikát. Je nutné si SSL certifikát od SSLmarketu z PEM formátu (Base64) převést do formátu PKCS#7, tedy P7B, a potom naimportovat spolu s intermediatem. K tomu poslouží článek Základy práce s OpenSSL - export, import, převody formátů.

Podpis aplikací a appletů 

Pro podpis Jar souboru využijte aplikace jarsigner.

jarsigner -keystore

Časovou značku (timestamp) přidáte příkazem:

jarsigner -tsa https://timestamp.geotrust.com/tsa -keystore

Při podpisu budete vyzvání k zadání hesla Keystoru, které jste vytvořili při jeho založení.

Kontrola podpisu

Jistě budete chtít váš nový podpis zkontrolovat. To můžete provést příkazem

jarsigner -verify -verbose -certs C:TestApplet.jar

Pokud je vše v pořádku, můžete podepsanou aplikaci publikovat na internetu a zpřístupnit ji uživatelům. Pokud si váš Java program nebo applet stáhnou, jejich Java Runtime Environment jim zobrazí vaše digitální ID z podpisu.

Více informací najdete v dokumentaci

Tento článek slouží k rychlé orientaci v podpisu Java aplikace. Doporučuji prostudovat kompletní dokumentaci Oraclu, která pokrývá celou problematiku podepisování Java aplikací a appletů. Najdete ji na webu The Java Tutorials.


Ing. Jindřich Zechmeister
Specialista pro bezpečnostní SSL certifikáty
DigiCert TLS/SSL Professional
e-mail: jindrich.zechmeister(at)zoner.cz