HOWTO · Java
Contraseña predeterminada del almacén de claves de Java
Este tutorial lo guiará a través de los pasos para cambiar la contraseña de su almacén de claves de Java.
En esta página
Las aplicaciones Java protegen las claves criptográficas y los certificados en un keystore (almacén de claves), y cada keystore está protegido por una contraseña. La contraseña predeterminada del keystore de Java que incluye el trust store del JDK es changeit. Como ese valor está documentado públicamente, no es adecuado para ningún keystore que necesite protección real.
Este tutorial explica qué es un keystore de Java, muestra cómo cambiar su contraseña con la utilidad de línea de comandos keytool y describe cómo verificar que la nueva contraseña funciona.
¿Qué es un keystore de Java?
Un keystore de Java es un archivo que almacena material criptográfico: claves privadas con sus cadenas de certificados y certificados públicos de confianza. Los keystores de Java existen en varios formatos — JKS y PKCS12 son los más comunes — y keytool, que se incluye con el Java Development Kit (JDK), los lee y los escribe.
El JDK incluye un trust store llamado cacerts que contiene las autoridades de certificación en las que Java confía de forma predeterminada. Su ubicación depende de la instalación de Java: JDK 8 lo guarda en jre/lib/security, mientras que los JDK más recientes lo colocan en lib/security dentro de JAVA_HOME. Los keystores creados para una aplicación concreta pueden estar en cualquier lugar del disco, así que confirme siempre qué archivo carga realmente la aplicación antes de cambiar su contraseña.
¿Cuál es la contraseña predeterminada del keystore de Java?
La contraseña predeterminada del trust store cacerts del JDK es changeit. Es una convención muy conocida, que es precisamente la razón por la que constituye una defensa pobre: cualquier persona familiarizada con Java puede abrir o modificar un keystore que aún la utilice.
Tenga en cuenta que changeit se aplica al archivo cacerts incluido con el JDK. Un keystore creado por usted o por su organización tiene la contraseña que se eligió en el momento de crearlo, y no existe ningún mecanismo de recuperación para una contraseña personalizada olvidada: guárdela en un lugar seguro.
Cambiar la contraseña del keystore con keytool
Cambie la contraseña de un keystore con keytool -storepasswd. Para un keystore real, ejecute el comando de forma interactiva — keytool -storepasswd -keystore /path/to/keystore.jks, reemplazando /path/to/keystore.jks por el archivo real — de modo que los secretos se escriban en los prompts en lugar de aparecer en el historial del shell. keytool primero solicita Enter keystore password: para la contraseña actual (changeit en un archivo cacerts sin modificar) y luego pide la nueva contraseña dos veces con New keystore password: y Re-enter new password:.
Algunos detalles son importantes:
- Apunte
-keystoreal archivo exacto que carga la aplicación; no dé por sentada una ruta fijaJAVA_HOME/jre/lib/security/cacerts, ya que las estructuras de directorios varían entre versiones y distribuciones del JDK. - Las opciones
-storepassy-newaceptan la contraseña actual y la nueva como argumentos del comando para uso no interactivo. Eso las expone en el historial del shell y en las listas de procesos, así que úselas solo en archivos desechables o en automatización protegida. - La forma interactiva se detiene a la espera de la entrada escrita, por lo que el script siguiente realiza la misma operación
-storepasswdde forma desatendida sobre un archivo desechable creado a partir de un certificado autofirmado temporal.
Ejecute este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
set -e
TMP="$(mktemp -d)"
cat > "$TMP/demo.crt" <<'PEM'
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIUa9tUIt8iYx/aaMtcdywj4SboyakwDQYJKoZIhvcNAQEL
BQAwDzENMAsGA1UEAwwEZGVtbzAeFw0yNjEwMzAxMjIyMjRaFw0zNjEwMjcxMjIy
MjRaMA8xDTALBgNVBAMMBGRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCsMo66EXV3Ic75iT7RamlTZYn3RkhqEAKYHNLDe1pIf4ovN0tDhoP1Ce99
BtP6UNLds86BLB9S9n+LHwOsdu5NxerqXGLY3+6n3LpQRy+nH1iCO+j+W51xhqN7
JCpu7ckwCGd1lWcFFInIRhQ7oNsobbTI5NB+k84Kh+U5cyr5eYVCvbvROi/l5P0J
wyaggYOKn8l+33kmBOopXso2I7FRcSXLNYQkQBw/oCjikpdWR/RwtwLZuxssOP3Y
GsFZYVqPjkDt2WcUSuM+CoFFNudQXkI4V3OQTe4P5tFNATOV+uwmHFIKvcaEv9W5
/SckhD979tYNikl/9TzSmeqP8XdNAgMBAAGjUzBRMB0GA1UdDgQWBBQBwJRi578D
+rJwBEsFH2kk4q42/zAfBgNVHSMEGDAWgBQBwJRi578D+rJwBEsFH2kk4q42/zAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBspuqrqHp3p4TKiuZm
Rh0xsR2PTjP/IycwWwNXK0F7zUgvEIw49o3QSgaOBz1x+DDGYQ0mjUZo6WlJ2A6z
vaYp13E7y40maTxccMS3UEzkJx7A0p9JkbrK+HwBLHN85YUwn/A1BW197+9eJpET
ilivdUYGUfBzcNS4dwk8YjDCJmycy/5KqN8xp4jFX9NN0aHT28SkmYzMrXJS/6qV
bdS6KoKbZJ+4BGPSS4G2JthX8oD85Ve/6AquFX25FpIomUgW7u9f3TQXsgS/Y3mx
bnDIVFsuA+E23baxwOq+LfBUcGSWbtwnt+ftarRmebfiE/3GZQ7aim7xHgKQxtYe
7YVQ
-----END CERTIFICATE-----
PEM
keytool -importcert -alias demo -file "$TMP/demo.crt" \
-storetype JKS -keystore "$TMP/demo.jks" \
-storepass changeit -noprompt > /dev/null 2>&1
keytool -storepasswd -keystore "$TMP/demo.jks" -storetype JKS \
-storepass changeit -new newStorePass1 2>/dev/null
echo "keystore password changed"
keystore password changed
El script importa el certificado temporal en un nuevo keystore JKS cuya contraseña inicial es changeit — reproduciendo el valor predeterminado real — y luego actualiza la contraseña del almacén a newStorePass1 sin prompts. Los mensajes que muestra el ejemplo permanecen en inglés, tal como los emite la herramienta. Importar un certificado mantiene la demostración rápida y sin prompts; en su propio keystore, prefiera los prompts interactivos descritos anteriormente.
Verificar la nueva contraseña del keystore
Verifique el cambio listando el contenido del keystore con la nueva contraseña: keytool -list -keystore /path/to/keystore.jks solicita Enter keystore password: e imprime el tipo de keystore y sus entradas cuando la contraseña es correcta. La forma no interactiva pasa la contraseña con -storepass.
Ejecute este ejemplo:
El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.
set -e
TMP="$(mktemp -d)"
cat > "$TMP/demo.crt" <<'PEM'
-----BEGIN CERTIFICATE-----
MIIC/zCCAeegAwIBAgIUa9tUIt8iYx/aaMtcdywj4SboyakwDQYJKoZIhvcNAQEL
BQAwDzENMAsGA1UEAwwEZGVtbzAeFw0yNjEwMzAxMjIyMjRaFw0zNjEwMjcxMjIy
MjRaMA8xDTALBgNVBAMMBGRlbW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQCsMo66EXV3Ic75iT7RamlTZYn3RkhqEAKYHNLDe1pIf4ovN0tDhoP1Ce99
BtP6UNLds86BLB9S9n+LHwOsdu5NxerqXGLY3+6n3LpQRy+nH1iCO+j+W51xhqN7
JCpu7ckwCGd1lWcFFInIRhQ7oNsobbTI5NB+k84Kh+U5cyr5eYVCvbvROi/l5P0J
wyaggYOKn8l+33kmBOopXso2I7FRcSXLNYQkQBw/oCjikpdWR/RwtwLZuxssOP3Y
GsFZYVqPjkDt2WcUSuM+CoFFNudQXkI4V3OQTe4P5tFNATOV+uwmHFIKvcaEv9W5
/SckhD979tYNikl/9TzSmeqP8XdNAgMBAAGjUzBRMB0GA1UdDgQWBBQBwJRi578D
+rJwBEsFH2kk4q42/zAfBgNVHSMEGDAWgBQBwJRi578D+rJwBEsFH2kk4q42/zAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBspuqrqHp3p4TKiuZm
Rh0xsR2PTjP/IycwWwNXK0F7zUgvEIw49o3QSgaOBz1x+DDGYQ0mjUZo6WlJ2A6z
vaYp13E7y40maTxccMS3UEzkJx7A0p9JkbrK+HwBLHN85YUwn/A1BW197+9eJpET
ilivdUYGUfBzcNS4dwk8YjDCJmycy/5KqN8xp4jFX9NN0aHT28SkmYzMrXJS/6qV
bdS6KoKbZJ+4BGPSS4G2JthX8oD85Ve/6AquFX25FpIomUgW7u9f3TQXsgS/Y3mx
bnDIVFsuA+E23baxwOq+LfBUcGSWbtwnt+ftarRmebfiE/3GZQ7aim7xHgKQxtYe
7YVQ
-----END CERTIFICATE-----
PEM
keytool -importcert -alias demo -file "$TMP/demo.crt" \
-storetype JKS -keystore "$TMP/demo.jks" \
-storepass changeit -noprompt > /dev/null 2>&1
keytool -storepasswd -keystore "$TMP/demo.jks" -storetype JKS \
-storepass changeit -new newStorePass1 2>/dev/null
keytool -list -keystore "$TMP/demo.jks" -storetype JKS \
-storepass newStorePass1 > "$TMP/demo.list" 2>/dev/null
grep "keystore contains" "$TMP/demo.list"
Your keystore contains 1 entry
El grep imprime la línea con el número de entradas del listado real, que se muestra en inglés como en la salida original. Un listado exitoso demuestra que la nueva contraseña abre ese archivo concreto — si keytool la hubiera rechazado, el comando habría fallado. No demuestra que el contenido del keystore sea el esperado ni que la aplicación que lo utiliza esté configurada correctamente; considérelo una comprobación de acceso, no una auditoría de seguridad.
Limitaciones importantes y prácticas de seguridad
Cambiar la contraseña del keystore es solo una parte de la protección de un keystore. Tenga en cuenta estos puntos:
- Use un secreto único y difícil de adivinar. Un valor generado o una frase de contraseña larga es mejor que un patrón reutilizado en otros lugares.
keytoolacepta contraseñas cortas con solo una advertencia, así que cumplir su mínimo no es un objetivo de seguridad. - La contraseña del keystore no es la contraseña de la clave.
-storepasswdcambia únicamente la contraseña que abre el almacén. Las entradas de clave privada tienen sus propias contraseñas, gestionadas con-keypasswd, y algunas herramientas asumen que ambas coinciden mientras que otras las tratan como distintas: compruebe sus herramientas antes de cambiar una sin la otra. - Proteja el archivo, no solo la contraseña. Mantenga copias de seguridad del keystore en una ubicación segura, restrinja los permisos del sistema de archivos para que solo las cuentas que lo necesiten puedan leerlo y limite quién puede ejecutar
keytoolsobre él. - Rote cuando haya un motivo. Cambie la contraseña tras una sospecha de exposición o ante cambios de personal; rotarla según un calendario fijo no es automáticamente beneficioso.
Una contraseña cambiada por sí sola no protege una aplicación: combínela con copias de seguridad protegidas, acceso restringido y un almacenamiento adecuado del propio secreto.