¿Qué es el formato de archivo JKS?
Un archivo .jks es un Java KeyStore: un contenedor binario propietario que almacena claves privadas criptográficas y certificados X.509 para su uso en aplicaciones Java. El formato fue introducido por Sun Microsystems como parte de la Java Cryptography Architecture (JCA) a finales de la década de 1990 y es mantenido actualmente por Oracle.
Cada archivo .jks comienza con el número mágico de 4 bytes 0xFEEDFEED, seguido de un campo de versión (normalmente 0x00000002). El archivo utiliza el formato big-endian y contiene dos tipos de entradas: registros KeyEntry, que contienen una clave privada cifrada junto con su cadena de certificados, y registros TrustedCertEntry, que almacenan certificados sin cifrado. Un resumen SHA-1 con clave al final protege la integridad; una contraseña incorrecta o cualquier manipulación activa el conocido error *«keystore was tampered with, or password was incorrect»*.
Las claves privadas están protegidas por un esquema de cifrado basado en contraseña (PBE) propietario basado en SHA-1, que se considera débil según los estándares modernos. El formato .jks es exclusivo de Java y no es legible por herramientas como OpenSSL, que en su lugar esperan PKCS#12 o PEM.
Desde el JDK 9 (2017), Oracle depreció .jks en favor de .p12 / .pfx, que se convirtió en el nuevo tipo de almacén de claves predeterminado. keytool ahora emite una advertencia de migración en cada almacén JKS que abre. El almacén de confianza del sistema del JDK, cacerts, se ha distribuido históricamente como un archivo .jks. La variante relacionada .jceks (mágico 0xCECECECE) ofrece una protección de clave Triple-DES más fuerte, pero sigue siendo igualmente específica de Java.
Seguridad y protección
RIESGO: MEDIUMUn archivo JKS contiene datos inertes (sin código ejecutable), pero es un almacén SECRETO: comúnmente contiene claves privadas cuya exposición compromete la identidad de un servidor o la clave de firma de una aplicación. Trátelo como un archivo de contraseñas: nunca lo suba a un repositorio público, restrinja los permisos del archivo y use una contraseña de almacén robusta. El cifrado del formato es débil para los estándares modernos, por lo que un .jks filtrado con una contraseña deficiente puede ser descifrado por fuerza bruta; esta es una razón adicional para migrar a PKCS#12 y rotar las claves si un almacén queda expuesto. No se debe confiar en archivos que afirmen ser almacenes de claves provenientes de fuentes no fiables.
Detalles del formato
en pocas palabras- Partida guardada de Star Wars Jedi Knight - Algunos títulos de Star Wars Jedi Knight de LucasArts/Raven utilizaban .jks para las partidas guardadas; se cargan dentro del juego, no tienen relación con los almacenes de claves de Java.
Programas que abren archivos JKS
Detalles técnicos
especificación profunda| Bytes mágicos | 0xFEEDFEED (FE ED FE ED) en el desplazamiento 0 del archivo; identifica el archivo como JKS ante herramientas y validadores |
| Campo de versión del formato | Entero big-endian de 4 bytes en el desplazamiento 4; valor 1 o 2 (la versión 2 es la actual) |
| Orden de bytes | Big-endian en toda la estructura binaria |
| Cifrado de clave privada | Esquema PBE propietario que utiliza SHA-1 como primitiva de derivación de claves; considerado criptográficamente débil según los estándares modernos |
| Almacenamiento de certificados | Los registros TrustedCertEntry contienen certificados X.509 codificados en DER en texto plano; sin cifrado por certificado |
| Protección de integridad | Resumen SHA-1 con clave sobre todo el contenido del almacén, derivado de la contraseña del almacén; detecta tanto la manipulación como una contraseña incorrecta |
| Tipos de entrada | Dos tipos: KeyEntry (clave privada cifrada + cadena de certificados) y TrustedCertEntry (certificado simple) |
| Direccionamiento de entradas | Cada entrada se identifica mediante un alias de cadena único; los alias no distinguen entre mayúsculas y minúsculas dentro de un almacén |
| Tipo MIME | application/x-java-keystore (específico de Java); recurre a application/octet-stream para el manejo genérico |
| Tamaño de archivo típico | 1 KB - 50 KB para unas pocas claves y certificados; hasta varios MB para almacenes de confianza grandes como cacerts |
| Herramienta de gestión principal | Utilidad de línea de comandos keytool del JDK; la alternativa gráfica es KeyStore Explorer |
| Alcance de la plataforma | Portátil en cualquier SO con un JRE o JDK, pero el formato es específico de Java y no es interoperable con OpenSSL u otras herramientas PKI que no sean de Java |
| Estado de depreciación | Depreciado por Oracle desde el JDK 9 (2017); PKCS#12 es ahora el tipo de almacén de claves predeterminado y keytool advierte en cada almacén JKS abierto |
| Variante de Sun más fuerte | JCEKS (mágico 0xCECECECE): una extensión de Sun con envoltura de clave Triple-DES; sigue siendo exclusivo de Java |
| Almacén de confianza del sistema | El archivo cacerts del JDK que se incluye con cada JRE ha sido históricamente un almacén JKS que contiene cientos de certificados de CA raíz |
| Lanzado | 1990s, with the Java security architecture (Java Cryptography Architecture) |
| Última versión | JKS format unchanged; deprecated in favor of PKCS#12 (default keystore type since JDK 9, 2017) |
| Especificación | docs.oracle.com |
Conversiones de JKS
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos JKS.