2009-06-09 12 views
40

Perché dovrei firmare i miei file JAR?Perché dovrei firmare i miei file JAR?

So che ho bisogno di firmare i miei file JAR lato client (contenenti le applet) in modo che cose speciali come l'accesso al filesystem possano essere fatte, e in modo che il bit fastidioso nella parte inferiore di windows non venga mostrato, ma perché altro? E devo firmare i miei file JAR lato server contenenti Servlet, ecc.?

Alcune regole di base per quando e quando non firmare JAR sarebbero apprezzate - grazie!

+0

duplicato di http: // stackoverflow.it/questions/3327020/whats-the-point-of-sign-code-like-jars? – Dan

risposta

36

La risposta breve: non farlo, a meno che la tua politica aziendale non ti costringa a farlo.

La risposta lunga
vasetti di firma sta dicendo in modo efficace il tuo cliente "ho fatto questo, e vi garantisco che non sarà rovinare il vostro sistema. In caso contrario, vengono da me per vendetta". Questo è il motivo per cui i barattoli firmati nella soluzione lato client distribuiti dai server remoti (applet/webstart) godono di privilegi più elevati rispetto alle soluzioni non firmate.

Sulle soluzioni lato server, dove non è necessario soddisfare le richieste di sicurezza JVM, questa garanzia è solo per la tranquillità del cliente.
La cosa brutta dei barattoli firmati è che si caricano più lentamente dei barattoli senza firma. Quanto più lento? è legato alla CPU, ma ho notato più di un aumento del 100% nel tempo di caricamento. Inoltre, le patch sono più difficili (devi firmare nuovamente il jar), le patch di classe sono impossibili (tutte le classi in un singolo pacchetto devono avere la stessa fonte di firma) e la suddivisione dei jar diventa un lavoro ingrato. Per non parlare del processo di compilazione è più lungo e che i certificati appropriati costano denaro (l'autofirmazione è quasi inutile).

Quindi, a meno che la politica aziendale non ti costringa a, non firmare giare sul lato server e conservare giare comuni in versioni firmate e non firmate (firmato vai alla distribuzione lato client, non firmato vai a codebase lato server).

+0

Perché è associato alla CPU? Penso che controllare i CRL sia un'azione online e dipenda molto dalla velocità della connessione Internet, probabilmente concentrandoci sulla latenza. –

+0

Quando si carica un file jar firmato, viene eseguita una procedura chiamata "verifica". Sia la firma che la verifica sono costose perché gli algoritmi crittografici devono essere eseguiti per eseguire l'operazione, qualunque essa sia. Tuttavia: costoso in relazione alla non firma/non verifica. Voglio dire: il tempo trascorso può o non può essere un problema, a seconda delle circostanze. –

+0

Questo è un terribile, terribile consiglio. – PopKernel

0

La firma di un file jar, proprio come l'utilizzo dei certificati in altri contesti, viene eseguita in modo che le persone che lo utilizzano sappiano da dove provengono. Le persone possono avere fiducia che Chris Carruthers non sta per scrivere codice dannoso e quindi sono disposti a consentire l'accesso dell'applet al proprio file system. La firma dà loro la garanzia che il barattolo è stato creato da te e non da un impostore o da qualcuno di cui non si fida.

Nel caso di barattoli lato server o libreria, di solito non è necessario fornire questo tipo di garanzia a nessuno. Se è il tuo server, allora sai quali vasetti stai usando e da dove vengono, e probabilmente ti fidi che il tuo codice non sia dannoso.

2

Un buon motivo potrebbe essere se non si desiderava mai che qualcuno fosse in grado di intrufolarsi in classi modificate per essere chiamato dal proprio codice.

Sfortunatamente questo include te stesso MrGreen Quindi questo è solo da fare se ne hai davvero bisogno. Controlla il concetto di "vaso sigillato".

1

In termini di applet: da 6u10, il Sun JRE sostituisce il banner di avvertimento con un triangolo di avviso meno invadente (da 6u12, IIRC) (necessario per supportare finestre sagomate e trasparenti). 6u10 consente inoltre l'accesso controllato ai file tramite l'API dei servizi JNLP.

Il principio del privilegio minimo indica che non è necessario firmare le classi dei file jar. La sicurezza non è necessariamente facile.

La semplice visualizzazione di una finestra di dialogo del certificato non deve essere interpretata nel senso che l'intero contenuto di una pagina Web deve essere considerato attendibile.