He estado leyendo sobre el almacén de claves JKS Java, pero no encontré detalles sobre el formato.
- ¿La contraseña de la tienda es solo para verificar la integridad del archivo?
- ¿Cómo se protegen las claves privadas?
He estado leyendo sobre el almacén de claves JKS Java, pero no encontré detalles sobre el formato.
detalles sobre el formato [JKS].
Esto se implementa mediante sun.security.provider.JavaKeyStore
(fuente en mercurial)
pero es bastante simple y se basa en las convenciones Data{Output,Input}Stream
de Java:
Número mágico de 4 bytes, número de versión de 4 bytes, conteo de entradas de 4 bytes; un número variable de entradas, cada una de las cuales contiene un tipo de 4 bytes, longitud + nombre UTF (modificado), marca de tiempo de 8 bytes, longitud + codificación + certcount para una clave privada y tipo (en la práctica siempre X.509
) + longitud + codificación para el / cada certificado; y al final el hash de la contraseña más los datos anteriores para verificar la integridad.
¿La contraseña de la tienda es solo para verificar la integridad del archivo?
Sí. La API de JCA y el formato JKS permiten que cada clave privada se cifre con una contraseña separada, que puede ser diferente de la contraseña de la tienda. Por ejemplo, keytool
le permite especificar una contraseña clave, pero valores predeterminados es la misma que la contraseña del almacén. Sin embargo, algunos programas no pueden manejar claves y contraseñas diferentes; en particular, aquellos que utilizan el administrador de confianza y / o el administrador de claves predeterminados para SSL / TLS (y, por lo tanto, HTTPS), por lo que en esos casos se debe usar la misma contraseña tanto para la tienda como para la (s) clave (s).
¿Cómo se protegen las claves privadas?
Cada clave privada es hash PBE + utilizando un esquema 'propietario' en sun.security.provider.KeyProtector
(fuente en mercurial) y formateado en el archivo como un PKCS # 8 EncryptedPrivateKeyInfo
.
Lea otras preguntas en las etiquetas public-key-infrastructure key-management java