Javas koda sertificēšana

grant signedBy "entity1,entity2", codeBase "file:///c:/home/admin" { ... }

Šāds pieraksts nozīmē, ka kodam no noteiktas vietas, kuru parakstījuši entity1 UN entity2 var piešķirt noteiktas privilēģijas.

Sertifikāta jēdziens

Sertifikāts satur sekojošas daļas:

  • Publisko atslēgu
  • Subjekta jeb īpašnieka atribūtus - vārdu, organizāciju un organizācijas struktūrvienību, pilsētu, provinci un valsti
  • Digitālo parakstu - izdevēja (issuer) apliecinātu apgalvojumu, ka īpašniekam (owner) tik tiešām ir šī sertifikāta turētājs
  • Sertifikāta izdevēja pilns vārds ar visiem atribūtiem
  • ("Alias" - īss subjekta vārds sertifikāta noglabāšanai

CCITT (Comite Consultatif International Telephonique et Telegraphique) ieviesusi X.509 sertifikāta standartu.

  • Versija (līdz šim bijušas 3 versijas)
  • Seriālnumurs - unikāli identificē vienas autoritātes izsniegto konkrēto sertifikātu. To var lietot, piemēram, Certificate Revocation List - atsaucot sertifikātus.
  • Paraksta algoritma identificētājs - algoritms, lai pārbaudītu elektronisko parakstu
  • Izdevēja vārds - X.500 vārds kādam, kurš izdevis šo sertifikātu
  • Derīguma termiņš - sertifikāti šajā nozīmē ir derīgi tikai ierobežotu laiku (dažas sekundes līdz gadsimtam)
  • Subjekta vārds X.500 notācijā, piemēram,
    CN=Java Duke, OU=Java Software, O=Sun Microsystems, C=US
    
    t.i. "Common Name", "Organizational Unit", "Organization", "Country". Var būt arī "Locality Name" vai "StateName".
  • Subjekta publiskā atslēga, kopā ar identifikatoru algoritmam, uz kuru šī atslēga attiecas

Ja sertifikāts nav "pašparakstīts", tad publiskās atslēgas sertifikāts ir kādas uzticamas iestādes elektroniski parakstīts apgalvojums, kurš apliecina, ka citas iestādes atribūti un publiskā atslēga pieņem noteiktas vērtības. Var izveidoties sertifikātu ķēdīte, kur katrs nākamais sertifikāts sertificē visu iepriekšējo.

c:\webkursi\java_xml\security\certificates>keytool -genkey -alias kalvis -keypass qwerty
Enter keystore password:  qwerty
What is your first and last name?
  [Unknown]:  Kalvis Apsitis
What is the name of your organizational unit?
  [Unknown]:  RITI
What is the name of your organization?
  [Unknown]:  DATI
What is the name of your City or Locality?
  [Unknown]:  Riga
What is the name of your State or Province?
  [Unknown]:  Latvia
What is the two-letter country code for this unit?
  [Unknown]:  LV
Is <CN=Kalvis Apsitis, OU=RITI, O=DATI, L=Riga, ST=Latvia, C=LV> correct?
  [no]:  y

Parole, kuru ievada dialogā kā keystore password attiecas uz atslēgu glabātavu kopumā, teiksim c:\winnt\profiles\username\.keystore, (tai turpmāk jābūt tai pašai), turpretī parole, kuru norāda komandrindā aiz -keypass ir dotajai privātajai atslēgai piešķirtā parole. Ievadītos sertifikātus var arī izdrukāt un apskatīties:

c:\webkursi\java_xml\security\certificates>keytool -list -alias kalvis
Enter keystore password:  qwerty
kalvis, Mon May 21 07:45:25 GMT+03:00 2001, keyEntry,
Certificate fingerprint (MD5): 7F:40:A8:DA:C9:27:7D:45:71:C0:6F:38:2F:6E:0F:9E

Var uztaisīt arī Base64 kodētu pašparakstītu sertifikātu:

c:\webkursi\java_xml\security\certificates>keytool -certreq -alias kalvis -file kalvis.cer
Enter keystore password:  qwerty

Rezultāts ir redzams failā kalvis.cer. Tādu varētu nosūtīt sertifikācijas autoritātei un saņemt atpakaļ parakstītu rezultātu, kuru varētu ieimportēt atslēgu krātuvē.

Sertifikācijas process

Certification Authority (CA) saņem Certificate Signing Request (CSR) un, pārbaudījusi datus par CSR iesniedzēju, izsniedz CA parakstītu sertifikātu, ka CSR tiešām ir tas, par ko uzdodas.

Koda parakstīšana

Aplūkosim šādu vienkāršu programmas paraugu:

import java.io.*;

public class Count {
    public static void countChars(InputStream in) throws IOException
    {
        int count = 0;

        while (in.read() != -1)
            count++;

        System.out.println("Counted " + count + " chars.");
    }

    public static void main(String[] args) throws Exception
    {
        if (args.length >= 1)
            countChars(new FileInputStream(args[0]));
        else
            System.err.println("Usage: Count filename");
    }
}

To varam kompilēt un izveidot JAR failu šādā veidā:

javac count.java
jar cvf count.jar Count.class

JAR parakstīšana izskatās šādi:

c:\webkursi\java_xml\security\certificates>jarsigner -signedjar scount.jar count
.jar kalvis
Enter Passphrase for keystore: qwerty

Lapa mainīta 2004-12-02 22:00:21