A JAR-ra vonatkozó paraméterek
Main-Class
Amennyiben önállóan futtatható JAR-t készítünk, a JVM-nek meg kell adnunk paraméterként, hogy mely osztály "main" metódusa a belépési pont. Mivel ezt körülményes minden indításnál megadni, ezért lehetőségünk van a MF-ben tárolni ezt a beállítást.Main-Class: my.package.startApplication
Class-Path
Az osztály-betöltő ha még nem töltött be egy hivatkozott osztályt, akkor az alapértelmezett útvonalakon elkezdi keresni azt. Ha szerencsések vagyunk, akkor sikerrel jár és az osztály bekerül a memóriába. Amennyiben az alapértelmezettől eltérő útvonalon található az osztály, akkor annak pontos helyet specifikálhatjuk a MF-ben. Lehetőség van több JAR-t is felsorolni szóközzel elválasztva. A fejlesztés könnyítése érdekében helyettesítő karaktereket is használhatunk az útvonal megadásakor.Class-Path: ./lib/first.jar /usr/lib/secound.jar /usr/lib/java/*
Egyéb opcionális paraméterek
A teljeség igénye nélkül.Archiver-Version: Plexus Archiver Created-By: Apache Ant Built-By: Joe Build-Jdk: 1.6.0_04 Signature-Version: 1.0
Bejegyzésekre vonatkozó paraméterek
Name
Lehetőségünk van nevet adnia a JAR-on belül az egyes csomagoknak, osztályoknak vagy erőforrásoknak. A névadás konvenciója, hogy a név értéke a csomag esetén relatív útvonala a fájlstruktúrában, és egy lezáró "/"-karakter, osztály vagy egyéb erőforrás-fájl esetén a teljes relatív elérés. Minden további attribútum ami üres-sor nélkül a név után következik, érvényes lesz a Name-ben hivatkozott elemre.Name: my/package/
Sealed
A névvel ellátott csomagokat opcionálisan le lehet zárni, ami azt jelenti, hogy a lezárt csomagban lévő összes definiált osztály egyazon JAR-ban található. A lezárásnak biztonsági és verziózási okai lehetnek.Name: my/package/ Sealed: true
Package Versioning Specification
Verzió-kezelési specifikációban a csomagnak többféle attribútum is megadható opcionálisan, az egyetlen megkötés, hogy ezen beállítások mindegyikének szintén a Name attributumot kell követniük üres-sor hagyása nélkül.Name: my/package/ Specification-Title: "MF Sample" Specification-Version: "0.1" Specification-Vendor: "jpattern" Implementation-Title: "my.package" Implementation-Version: "build1" Implementation-Vendor: "jpattern"
Content-Type
A Content-Type segítségével az adott elem MIME tipusát határozhatjuk meg.Name: my/package/startApplication.properties Content-Type: text/plain
Java-Bean
A Java-Bean attribútum segítségével adható meg, hogy az adott elem Java Bean vagy sem.Name: my/package/startApplication.class Java-Bean: true
*-Digest
Az aláírással ellátott állományoknál kötelező elemként meg kell adni az állomány hashének base64 dekódolt reprezentációját. Az aláírás készítésről később.Name: my/package/startApplication.class SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64=
MANIFEST.MF állomány készítése Ant taskból
Természetesen a MF-et nem kell minden alkalommal manuálisan megszerkeszteni, hanem lehetőségünk van Ant taskbol előállítani tartalmát (Mavenből szintén).Aláírás és hitelesítés
A digitális aláírás fogalmát, és lényegét azt hiszem senkinek sem kell bemutatnom. Mivel a Java eléggé fejlett biztonsággal rendelkezik, elengedhetetlen, hogy az egyes csomagokat ne lehessen hitelesíteni. A Java a művelethez szükséges állományokat szintén a META-INF könyvtárban tárolja, tipikusan *.SF, *.DSA, *.RSA és SIG-* fájlokban. A hitelesítés menete tömören:
- Az aláíró egy titkos kulcs segítségével aláírja a JAR-t (pontosabban minden benne lévő állományt).
- A felhasználó a publikus kulccsal ellenőrzi az aláírást.
Aláírás készítése
- Aláírás készítésének első lépése, hogy generálnunk kell egy privát kulcsot.
keytool -genkey -alias jarSigner -keystore storedkeys -keypass passwd -dname "cn=jpatter" -storepass stpasswd
Mint is csinál ez a parancs? Generál egy kulcsot jarSigner névvel, és a keypass jelszóval védetté teszi. A keystore paraméterben megadott adatbázis-állományban eltárolja a kulcsot, mely állomány ha nem létezik a keytool létrehozza azt, és a storepass-ban megadott jelszóval védi. A dname paraméter specifikál egy un. "X.500 Distinguished Name" bejegyzést, a cn paraméterben megadott egyszerűsített névvel. Az "X.500 Distinguished Name azonosítja a bejegyzéseket a X.509 hitelesítéshez, értéke tetszőleges lehet. - Az elkészült JAR-unk aláírásához a jarsigner eszközt tudjuk segítségül hívni.
jarsigner -keystore storedkeys -storepass stpasswd -keypass passwd -signedjar myapp_signed.jar myapp.jar jarSigner
A parancs lényegében kiszedi az előzőekben létrehozott kulcsot, és a bemeneti JAR állomány minden elemén elvégzi az aláírást, a végeredményt pedig a kimeneti JAR-ba teszi. A JAR-ba pillanva máris megjelent a JARSIGNE.SF és JARSIGNE.DSA, melyek közül az előbbi az egyes állományok hitelesítéséért felel, az utóbbi a publikus kulcs. A JARSIGN.SF állományt megnyitva valami hasonló tárul a szemünk elé:
Signature-Version: 1.0 SHA1-Digest-Manifest-Main-Attributes: FPLdz3FFeWLdgX0fUdHTqjUNkpE= Created-By: 1.6.0_20 (Sun Microsystems Inc.) SHA1-Digest-Manifest: AJwzuuyn2mg59fYB2qEhUL0PPgI= Name: my/resources/logo.png SHA1-Digest: oVtyix/BpiM9iq1fG/nMpy4Xy4Q= Name: my/package/startApplication.class SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64=
A MF állományunk tartalma is automatikusan megváltozott, az SHA1-Digest bejegyzések kerültek bele.
Aláírás hitelesítése
A hitelesítés szintén a jarsigner eszközzel történik.
jarsigner -verify myapp_signed.jareredményként pedig "jar verified" vagy "jar is unsigned" értékeket kaphatjuk.
Vmi előrhetőség lehetne vmerre (mondjuk mail...) Meg valami google-mentes hozzászólási lehetőség.
VálaszTörlés/jpattern[@]{1}rhodeus\.hu/ erre a címre írj nyugodtam.
VálaszTörlés