Che cos'è il formato di file JKS?
Un file .jks è un Java KeyStore - un contenitore binario proprietario che memorizza chiavi crittografiche private e certificati X.509 per l'uso da parte di applicazioni Java. Il formato è stato introdotto da Sun Microsystems come parte della Java Cryptography Architecture (JCA) alla fine degli anni '90 ed è mantenuto oggi da Oracle.
Ogni file .jks inizia con il numero magico a 4 byte 0xFEEDFEED, seguito da un campo versione (tipicamente 0x00000002). Il file è in formato big-endian e contiene due tipi di voci: record KeyEntry, contenenti una chiave privata crittografata più la sua catena di certificati, e record TrustedCertEntry, che memorizzano certificati senza crittografia. Un digest SHA-1 con chiave alla fine protegge l'integrità - una password errata o qualsiasi manomissione scatena il familiare errore *«keystore was tampered with, or password was incorrect»*.
Le chiavi private sono protette da uno schema di crittografia basata su password (PBE) proprietario basato su SHA-1, considerato debole per gli standard moderni. Il formato .jks è esclusivo di Java e non è leggibile da strumenti come OpenSSL, che richiedono invece PKCS#12 o PEM.
Dal JDK 9 (2017), Oracle ha deprecato .jks a favore di .p12 / .pfx, che è diventato il nuovo tipo di keystore predefinito. keytool ora emette un avviso di migrazione su ogni archivio JKS che apre. Il trust store di sistema del JDK cacerts è stato storicamente distribuito come file .jks. La variante correlata .jceks (magic 0xCECECECE) offre una protezione delle chiavi Triple-DES più forte, ma rimane ugualmente specifica per Java.
Sicurezza e incolumità
RISCHIO: MEDIUMUn file JKS contiene dati inerti (nessun codice eseguibile), ma è un archivio SEGRETO: contiene comunemente chiavi private la cui esposizione compromette l'identità di un server o la chiave di firma di un'app. Trattalo come un file di password - non caricarlo mai in un repository pubblico, limita i permessi del file e usa una password robusta. La crittografia del formato è debole per gli standard moderni, quindi un .jks trapelato con una password debole può essere forzato tramite brute-force; questo è un ulteriore motivo per migrare a PKCS#12 e ruotare le chiavi se un keystore viene mai esposto. I file che dichiarano di essere keystore provenienti da fonti non attendibili non dovrebbero essere considerati affidabili come trust store.
Dettagli del formato
in sintesi- Salvataggio del gioco Star Wars Jedi Knight - Alcuni titoli Star Wars Jedi Knight di LucasArts/Raven utilizzavano .jks per i salvataggi di gioco; caricati all'interno del gioco, non correlati ai keystore Java.
Programmi che aprono file JKS
Dettagli tecnici
specifiche approfondite| Magic bytes | 0xFEEDFEED (FE ED FE ED) all'offset 0 del file; identifica il file come JKS per strumenti e validatori |
| Campo versione formato | Intero big-endian a 4 byte all'offset 4; valore 1 o 2 (la versione 2 è quella attuale) |
| Ordine dei byte | Big-endian in tutta la struttura binaria |
| Crittografia chiave privata | Schema PBE proprietario che utilizza SHA-1 come primitiva di derivazione della chiave; considerato crittograficamente debole per gli standard moderni |
| Archiviazione certificati | I record TrustedCertEntry contengono certificati X.509 codificati in DER in testo in chiaro - nessuna crittografia per singolo certificato |
| Protezione integrità | Digest SHA-1 con chiave sull'intero contenuto dell'archivio, derivato dalla password dell'archivio; rileva sia manomissioni che password errate |
| Tipi di voci | Due tipi: KeyEntry (chiave privata crittografata + catena di certificati) e TrustedCertEntry (certificato nudo) |
| Indirizzamento voci | Ogni voce è identificata da un alias stringa univoco; gli alias non fanno distinzione tra maiuscole e minuscole all'interno di un archivio |
| Tipo MIME | application/x-java-keystore (specifico per Java); ripiega su application/octet-stream per la gestione generica |
| Dimensione tipica del file | 1 KB - 50 KB per alcune chiavi e certificati; fino a diversi MB per grandi trust store come cacerts |
| Strumento di gestione principale | Utility a riga di comando keytool del JDK; l'alternativa grafica è KeyStore Explorer |
| Ambito piattaforma | Portabile su qualsiasi sistema operativo con un JRE o JDK, ma il formato è specifico per Java e non interoperabile con OpenSSL o altri strumenti PKI non Java |
| Stato di deprecazione | Deprecato da Oracle a partire dal JDK 9 (2017); PKCS#12 è ora il tipo di keystore predefinito e keytool avverte su ogni archivio JKS aperto |
| Variante Sun più forte | JCEKS (magic 0xCECECECE) - un'estensione Sun con wrapping della chiave Triple-DES; comunque solo per Java |
| Trust store di sistema | Il file cacerts del JDK fornito con ogni JRE è stato storicamente un keystore JKS contenente centinaia di certificati root CA |
| Rilasciato | 1990s, with the Java security architecture (Java Cryptography Architecture) |
| Ultima versione | JKS format unchanged; deprecated in favor of PKCS#12 (default keystore type since JDK 9, 2017) |
| Specifica | docs.oracle.com |
Conversioni JKS
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file JKS.