recomienda - ¿No necesita una contraseña para acceder a un almacén de confianza(hecho con java keytool)?
introduzca la contraseña del almacen de claves android (4)
Acabo de crear un almacén de confianza con la herramienta de claves de Java (para la autenticación del servidor de un servidor que no tiene un certificado CA). Sin embargo, me di cuenta de algo extraño. Estoy empezando mi cliente así:
java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client
(Nota: NO hay una contraseña especificada)
La llamada de arriba funciona.
Sin embargo cuando intento esto:
java -classpath <STUFF> Client
No funciona. (Obviamente no funciona, requiere el almacén de confianza).
Esperaba tener que pasar en esta opción (pero no lo hice):
-Djavax.net.ssl.trustStorePassword=mypass
Pregunta : ¿No necesita una contraseña para acceder a un almacén de confianza? ¿Es la contraseña sólo para modificación? ¿Qué pasa con un almacén de claves?
Además de la excelente respuesta de @ pascal-thivent:
La contraseña del almacén de claves tiene dos propósitos: si no se proporciona, keytool
niega a permitirle reemplazar el contenido de la tienda con nuevos contenidos, por ejemplo, eliminando entradas de certificados existentes o agregando nuevas.
Por supuesto, si tiene acceso de escritura para actualizar el archivo de almacén de claves usando keytool
(no es setuid), puede reemplazar el contenido con otra herramienta que no verificó la contraseña. Y sabemos que la tienda y su formato se pueden leer sin una contraseña, por lo que presumiblemente podemos escribir lo que queramos allí.
Ahí es donde entra la contraseña de verificación. Cuando se escriben las entradas de la tienda, la contraseña de la tienda suministrada se utiliza para calcular un resumen de los contenidos de la tienda, como se indica mediante la contraseña. Este es un resumen / hash de una sola vía, por lo que sin la contraseña, no puede verificar si los contenidos de la tienda han sido manipulados o no. Del mismo modo, una persona maliciosa que no conoce la contraseña tampoco puede modificar el contenido de la tienda y producir el resumen-hash que se produciría con esa contraseña.
Es por eso que cuando no proporciona una contraseña, keytool
solo le advierte que no puede verificar que la tienda no haya sido manipulada. Si proporciona una contraseña no válida o si la tienda ha sido alterada, recibirá un mensaje diferente:
Enter keystore password: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
keytool
no pudo volver a crear el resumen de hash existente en función del contenido de la tienda actual y la contraseña que proporcionó, por lo que la contraseña es incorrecta o el almacén de claves está comprometido: keytool
no puede decirlo, pero se supone que usted o el software están leyendo el tienda sabe.
Tenga en cuenta que aunque el término almacén de claves se usa en general, se refiere igualmente a los almacenes de claves y de confianza . Generalmente, un almacén de claves es más a menudo un almacén de identidades y contiene identidades y sus claves privadas secretas, como las utiliza, por ejemplo, un servidor que ejecuta HTTPS. Un almacén de confianza más a menudo contiene solo claves públicas y no claves privadas, por lo que no contiene secretos, pero es importante para determinar en qué identidades confía un cliente .
La contraseña se utiliza para proteger la integridad de un almacén de claves. Si no proporciona ninguna contraseña de tienda, aún puede leer el contenido del almacén de claves. El comando keytool -list
muestra este comportamiento (utilícelo con una contraseña vacía).
Por defecto, la contraseña del almacén de confianza de JRE es "changeit". Si desea cambiar la contraseña predeterminada del almacén de confianza (cacerts) mediante Java, vaya a este enlace .
Si no especifica un almacén de confianza, se usa el predeterminado. ¿Supongo que recibe un error, que necesitará especificar un almacén de confianza para confiar en el host que solicita? El almacén de confianza predeterminado reside en $ JAVA_HOME / lib / security / jssecacerts.