Aláírt applet


1. Digitális személyazonosság

Digitális személyazonosságunk elkészítésének ezköze a keytool nevű alkalmazás. Első feladat, egy kulcspár generálása:

  $ keytool -genkey -alias Pici -keysize 1024
  Enter keystore password:  password
  What is your first and last name?
    [Unknown]:  Gábor Pécsy
  What is the name of your organizational unit?
    [Unknown]:  TTK
  What is the name of your organization?
    [Unknown]:  ELTE
  What is the name of your City or Locality?
    [Unknown]:  Budapest
  What is the name of your State or Province?
    [Unknown]:  .
  What is the two-letter country code for this unit?
    [Unknown]:  HU
  Is  correct?
    [no]:  yes

  Enter key password for <Pici>
          (RETURN if same as keystore password):  keypassword
Ha a kulcspár elkészült, a következő feladat, hogy a nyilvános kulcsunkhoz egy tanúsítvány készítsünk vagy készíttessünk. Ha egy hitelesítő hatóság (CA - Certification Authority) szolgaltatását kívánjuk igénybe venni, egy tanúsítvány hitelesítési kérelmet (CSR - Certifacte Signing Request) kell elküldenünk a kiválasztott CA-nak. Ezt is a keytool segítségével készíthetjük el:

  $ keytool -certreq -alias pici
  Enter keystore password:  password
  Enter key password for :  keypassword
  -----BEGIN NEW CERTIFICATE REQUEST-----
  MIICZDCCAiECAQAwXzELMAkGA1UEBhMCSFUxCjAIBgNVBAgTAS4xETAPBgNVBAcTCEJ1ZGFwZXN0
  MQ0wCwYDVQQKEwRFTFRFMQwwCgYDVQQLEwNUVEsxFDASBgNVBAMTC0f9Ym9yIFAaY3N5MIIBtzCC
  ASwGByqGSM44BAEwggEfAoGBAP1/U4EddRIpUt9KnC7s5Of2EbdSPO9EAMMeP4C2USZpRV1AIlH7
  WT2NWPq/xfW6MPbLm1Vs14E7gB00b/JmYLdrmVClpJ+f6AR7ECLCT7up1/63xhv4O1fnxqimFQ8E
  +4P208UewwI1VBNaFpEy9nXzrith1yrv8iIDGZ3RSAHHAhUAl2BQjxUjC8yykrmCouuEC/BYHPUC
  gYEA9+GghdabPd7LvKtcNrhXuXmUr7v6OuqC+VdMCz0HgmdRWVeOutRZT+ZxBxCBgLRJFnEj6Ewo
  FhO3zwkyjMim4TwWeotUfI0o4KOuHiuzpnWRbqN/C/ohNWLx+2J6ASQ7zKTxvqhRkImog9/hWuWf
  BpKLZl6Ae1UlZAFMO/7PSSoDgYQAAoGAdsRdLiLKhPJX8IOAVnV1g3xoxfOIwcDdaInn4Z+61oNh
  zs2xugsUpNYj/KNAm/6MEx0ROC4tppwC9gJheuYuMzDpJYMkiyFzSP9uWzQMuo5ztBPZO5mX+nx/
  X/A1S2n0tCNsSNJGtOlm01juRonT7oKXEBo6tnIv5Smb5s6fLhqgADALBgcqhkjOOAQDBQADMAAw
  LQIVAIqMdq/OWQMMHw/EtlIISjvZLU01AhQgEJhePXswKT1L/xc2MbLPfkH8Og==
  -----END NEW CERTIFICATE REQUEST-----
Másik lehetőség, hogy beérjük egy önaláírt tanúsítvánnyal. Ez a megoldás akkor használható, ha lehetőségünk van tanúsítványunk digitális ujjlenyomatát valamilyen biztonságos csatornán kereszül eljuttatnunk mindenkinek, aki a tanúsítvány hitelességét ellenőrizni kívánja. Kulpárunkhoz önaláírt tanúsítványt az alábbi módon készíthetünk:

  $ keytool -export -rfc -alias pici
  Enter keystore password:  password
  -----BEGIN CERTIFICATE-----
  MIIC8jCCArACBDqVWE8wCwYHKoZIzjgEAwUAMF8xCzAJBgNVBAYTAkhVMQowCAYDVQQIEwEuMREw
  DwYDVQQHEwhCdWRhcGVzdDENMAsGA1UEChMERUxURTEMMAoGA1UECxMDVFRLMRQwEgYDVQQDEwtH
  oGJvciBQGmNzeTAeFw0wMTAyMjIxODE5NTlaFw0wMTA1MjMxODE5NTlaMF8xCzAJBgNVBAYTAkhV
  MQowCAYDVQQIEwEuMREwDwYDVQQHEwhCdWRhcGVzdDENMAsGA1UEChMERUxURTEMMAoGA1UECxMD
  VFRLMRQwEgYDVQQDEwtHoGJvciBQGmNzeTCCAbcwggEsBgcqhkjOOAQBMIIBHwKBgQD9f1OBHXUS
  KVLfSpwu7OTn9hG3UjzvRADDHj+AtlEmaUVdQCJR+1k9jVj6v8X1ujD2y5tVbNeBO4AdNG/yZmC3
  a5lQpaSfn+gEexAiwk+7qdf+t8Yb+DtX58aophUPBPuD9tPFHsMCNVQTWhaRMvZ1864rYdcq7/Ii
  Axmd0UgBxwIVAJdgUI8VIwvMspK5gqLrhAvwWBz1AoGBAPfhoIXWmz3ey7yrXDa4V7l5lK+7+jrq
  gvlXTAs9B4JnUVlXjrrUWU/mcQcQgYC0SRZxI+hMKBYTt88JMozIpuE8FnqLVHyNKOCjrh4rs6Z1
  kW6jfwv6ITVi8ftiegEkO8yk8b6oUZCJqIPf4VrlnwaSi2ZegHtVJWQBTDv+z0kqA4GEAAKBgHbE
  XS4iyoTyV/CDgFZ1dYN8aMXziMHA3WiJ5+GfutaDYc7NsboLFKTWI/yjQJv+jBMdETguLaacAvYC
  YXrmLjMw6SWDJIshc0j/bls0DLqOc7QT2TuZl/p8f1/wNUtp9LQjbEjSRrTpZtNY7kaJ0+6ClxAa
  OrZyL+Upm+bOny4aMAsGByqGSM44BAMFAAMvADAsAhRLdb5NL36VEsLQufzMpl/gCfKJdwIUHVtG
  PUvAUJfIHHWiJeKSm616CZ0=
  -----END CERTIFICATE-----
Ez az önaláírt tanúsítvány ahhoz a kulcspárhoz tartozik, amellyel az alább taláható appletet aláírtam. A hozzá tartozó digitális ujjlenyomat megtalálható a könyvben, nyomtatott formában, amely így elég nehezen hamisítható. A tanúsítvány az egyszerűbb használat érdekében külön fájlban is megtalálható a CD-n. Bár valószínűtlen, hogy a fájlt a CD-n kicsréljék, mégis, legalább a gyakorlat kedvéért ellenőrizzük a digitális ujjlenyomatokat.

Ha tanúsítványunk ilyen vagy olyan módon elkészült, nincs más teendőnk, mint nyilvánosságra hozni, hogy leendő aláírt appletjeink felhasználói hozzáférjenek.

2. Az aláírt applet elkészítése

Ha a fent leírt módon előkészítettük digitális személyazonosságunkat, nincs más hátra, mint elkészíteni az aláírt appleteket. Ehhez először az appletet tartalmazó .class fájlt egy JAR (Java Archive) fájlba kell foglalnunk. Ehhez a jar programot használhatjuk, az alábbi módon:

  $ jar -cvf MyLittleApplet.jar MyLittleApplet.class
  added manifest
  adding: MyLittleApplet.class(in = 5327) (out= 2754)(deflated 48%)
Amint az megfigyelhető a program használata nagyon hasonló a Unix rendszrek tar programjáéhoz, ám az utóbbival ellentétban a jar tömöríti is a létrhozott archívumot, ami nagyon előnyös az appletek letöltésénél.

A következő lépés az elkészített JAR archívum aláírása. Ehhez a jarsigner alkalmazást használhatjuk.


  $ jarsigner MyLittleApplet.jar pici
  Enter Passphrase for keystore: password
  Enter key password for pici: keypassword
Az appletet a megszokott módon kell egy HTML oldalba beágyazni, az egyetlen eltérés, hogy meg kell jelölni az appletet tartalmazó archívum nevét is:

   <APPLET
      ARCHIVE=MyLittleApplet.jar
      CODE=MyLittleApplet.class
      HEIGHT=300
      WIDTH=450>
      ALT="A használt böngésző felismerte az &lt;APPLET&gt; tag-et de
           valamely okból mégsem hajtja végre a megadott applet-et. Ellenőrizze
           a biztonsági beállítások között, hogy az applet-ek futtatása
           engedélyezett!"
      A használt böngésző nem ismeri az &lt;APPLET&gt; tag-et!
   </applet>

3. Az applet használata

Az appletet haználni kívánóknak, mielőtt az appletet ténylegesen futtatni kezdenék, le meg kell szerezni az applet aláírójának tanúsítványát és elhelyezni a saját kulcsadatbázisában:

  $ keytool -import -file cert.txt -alias valaki
  Enter keystore password:  password
  Owner: CN=K?s Elek, OU=A, O=B, L=C, ST=D, C=E
  Issuer: CN=K?s Elek, OU=A, O=B, L=C, ST=D, C=E
  Serial number: 3a8bcfa6
  Valid from: Thu Feb 15 13:46:30 GMT+01:00 2001 until: Wed May 16 14:46:30 GMT+02:00 2001
  Certificate fingerprints:
           MD5:  F6:19:01:72:61:51:CA:3C:33:22:C2:84:DB:DC:88:70
           SHA1: E5:B4:0A:AF:C2:B4:AC:71:F6:86:63:E7:68:19:CD:72:CB:9B:11:90
  Trust this certificate? [no]:  yes
  Certificate was added to keystore
Amint látható, az -import parancs kiírja az importálandó tanúsítvány digitális ujjlenyomatát. Önaláírt tanúsítványok esetén ennek ellenőrzését soha ne mulasszuk el!

Az importálás sikerességéről meggyőződhetünk a keytool program -list parancsával. Az alábbi listában a "Pici" aliasnál találhatjuk azt a kulcspárat amellyel a CD-n található appletet aláírtam. A bejegyzésnél található digitális ujjlenyomat a kulcspárhoz tartozó önaláírt tanúsítványé. Az ujjlenyomat megtalálható a könyvben is, nyomtatott formában, így a CD-re írt tanúsítvány hitelessége ellenőrizhető.


  $ keytool -list
  Enter keystore password:  password

  Keystore type: jks
  Keystore provider: SUN

  Your keystore contains 2 entries:

  valaki, Thu Feb 22 19:39:46 GMT+01:00 2001, trustedCertEntry,
  Certificate fingerprint (MD5): F6:19:01:72:61:51:CA:3C:33:22:C2:84:DB:DC:88:70
  pici, Thu Feb 22 19:20:05 GMT+01:00 2001, keyEntry,
  Certificate fingerprint (MD5): B7:DF:B1:92:A1:E7:B7:54:E9:C5:F9:BB:62:33:9C:61
Az applet használatba vétele előtt még egy teendőnk van, az appletnek a futásához szükséges jogosultságok biztosítása. Ehhez a rendszer szabályzatfájljainak egyikébe (vagy a rendszer szintűbe vagy a felhasználói szintűbe) néhány bejegyzést kell elhelyeznünk, amelyek biztosítják a kívánt jogokat. A szabályzatfájlok kényelmesebb szerkesztéséhez használhatjuk a policytool programot, de ha az alapértelmezett szabályzatimplementációt használjuk, akkor egy egyszerű szövegszerkesztővel is elvégezhetjük ezt. Alább látható az a szabályzatfájl amelyet én használtam a példa applet tesztelésekor.

  /* AUTOMATICALLY GENERATED ON Sat Feb 24 12:42:20 GMT+01:00 2001*/
  /* DO NOT EDIT */

  keystore ".keystore";

  grant signedBy "pici",  codeBase "file://C|/phd/java/security/sample/-" {
    permission java.io.FilePermission "\\tmp\\-", "read, write, delete, execute";
    permission java.io.FilePermission "\\Phd\\-", "read";
  };
Mivel az applet írásakor Windows NT-n dolgoztam, megfigyelhető a különbség a kétféle útvonaljelölésben. A codeBase tag értéke egy URL, így itt az alkönyvtárak elválasztására a / karaktert használtam, ám a jogosultság megadásakor már a konkrét rendszerben érvényes fájlelválasztó karaktert kell használni, azaz a konkrét példában a \-t.

Ha a szabályzatfájlt megfelelően kiegészítettük, nincs más hátra mint kipróbálni az appletet. Figyelem, a fenti szabályzatfájl csak akkor fejti ki hatását, ha az applet futtatására az appletviewer-t használjuk! Más böngészők esetében a jogosultságok biztosítása másként történik, erről leírást az adott böngésző dokumentációjában találhatunk.