Wat is het JKS-bestandsformaat?
Een .jks-bestand is een Java KeyStore - een eigen binaire container die cryptografische privésleutels en X.509-certificaten opslaat voor gebruik door Java-toepassingen. Het formaat werd eind jaren 90 door Sun Microsystems geïntroduceerd als onderdeel van de Java Cryptography Architecture (JCA) en wordt tegenwoordig onderhouden door Oracle.
Elk .jks-bestand begint met het 4-byte „magic number” 0xFEEDFEED, gevolgd door een versieveld (meestal 0x00000002). Het bestand is big-endian en bevat twee soorten vermeldingen: KeyEntry-records, die een versleutelde privésleutel plus de certificaatketen bevatten, en TrustedCertEntry-records, waarin certificaten zonder versleuteling worden opgeslagen. Een keyed SHA-1 digest aan het einde beschermt de integriteit - een verkeerd wachtwoord of enige manipulatie activeert de bekende foutmelding *„keystore was tampered with, or password was incorrect”*.
Privésleutels worden beschermd door een eigen op wachtwoorden gebaseerd versleutelingsschema (PBE) gebouwd op SHA-1, wat naar moderne maatstaven als zwak wordt beschouwd. Het .jks-formaat is specifiek voor Java en niet leesbaar door tools zoals OpenSSL, die in plaats daarvan PKCS#12 of PEM verwachten.
Sinds JDK 9 (2017) heeft Oracle .jks verouderd verklaard ten gunste van .p12 / .pfx, wat het nieuwe standaard keystore-type werd. keytool geeft nu bij elke JKS-store die het opent een migratiewaarschuwing. De systeem-truststore cacerts van de JDK is historisch gezien altijd als een .jks-bestand geleverd. De gerelateerde .jceks-variant (magic 0xCECECECE) biedt sterkere Triple-DES sleutelbeveiliging, maar blijft eveneens Java-specifiek.
Beveiliging & veiligheid
RISICO: MEDIUMEen JKS-bestand bevat inerte gegevens (geen uitvoerbare code), maar het is een GEHEIM-opslag: het bevat doorgaans privésleutels waarvan blootstelling de identiteit van een server of de ondertekeningssleutel van een app in gevaar brengt. Behandel het als een wachtwoordbestand - plaats het nooit in een openbare repository, beperk bestandsrechten en gebruik een sterk wachtwoord. De versleuteling van het formaat is naar moderne maatstaven zwak, dus een gelekte .jks met een zwak wachtwoord kan worden gekraakt; dit is een extra reden om naar PKCS#12 te migreren en sleutels te roteren als een keystore ooit is blootgesteld. Bestanden die beweren keystores te zijn van onbetrouwbare bronnen mogen niet als truststore worden vertrouwd.
Formaatdetails
in een notendop- Star Wars Jedi Knight game save - Sommige LucasArts/Raven Star Wars Jedi Knight-titels gebruikten .jks voor opgeslagen spellen; deze worden in het spel geladen en hebben geen relatie met Java-keystores.
Programma's die JKS-bestanden openen
Technische details
diepe specificaties| Magic bytes | 0xFEEDFEED (FE ED FE ED) op bestandsoffset 0; identificeert het bestand als JKS voor tools en validators |
| Formaat versieveld | 4-byte big-endian integer op offset 4; waarde 1 of 2 (versie 2 is de huidige) |
| Bytevolgorde | Big-endian in de gehele binaire structuur |
| Privésleutel-versleuteling | Eigen PBE-schema dat SHA-1 gebruikt als basis voor sleutelafleiding; wordt naar moderne maatstaven als cryptografisch zwak beschouwd |
| Certificaatopslag | TrustedCertEntry-records bevatten X.509 DER-gecodeerde certificaten in platte tekst - geen versleuteling per certificaat |
| Integriteitsbescherming | Keyed SHA-1 digest over de gehele inhoud van de store, afgeleid van het wachtwoord; detecteert zowel manipulatie als een onjuist wachtwoord |
| Type vermeldingen | Twee typen: KeyEntry (versleutelde privésleutel + certificaatketen) en TrustedCertEntry (kaal certificaat) |
| Adressering van vermeldingen | Elke vermelding wordt geïdentificeerd door een unieke string-alias; aliassen zijn hoofdletterongevoelig binnen een store |
| MIME-type | application/x-java-keystore (Java-specifiek); valt terug op application/octet-stream voor algemene verwerking |
| Typische bestandsgrootte | 1 KB - 50 KB voor enkele sleutels en certificaten; tot enkele MB voor grote truststores zoals cacerts |
| Primair beheermiddel | JDK keytool opdrachtregelprogramma; grafisch alternatief is KeyStore Explorer |
| Platformbereik | Draagbaar naar elk besturingssysteem met een JRE of JDK, maar het formaat is Java-specifiek en niet interoperabel met OpenSSL of andere niet-Java PKI-tools |
| Status van veroudering | Verouderd door Oracle sinds JDK 9 (2017); PKCS#12 is nu het standaard keystore-type en keytool waarschuwt bij elke geopende JKS-store |
| Sterkere Sun-variant | JCEKS (magic 0xCECECECE) - een Sun-extensie met Triple-DES sleutelbeveiliging; nog steeds alleen voor Java |
| Systeem-truststore | Het JDK cacerts-bestand dat bij elke JRE wordt geleverd, is historisch gezien een JKS-keystore met honderden root CA-certificaten |
| Uitgebracht | 1990s, with the Java security architecture (Java Cryptography Architecture) |
| Laatste versie | JKS format unchanged; deprecated in favor of PKCS#12 (default keystore type since JDK 9, 2017) |
| Specificatie | docs.oracle.com |
JKS conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over JKS-bestanden.