¿No necesita una contraseña para acceder a un almacén de confianza (creado con la herramienta de claves de Java)?

StackOverflow https://stackoverflow.com/questions/2343691

Pregunta

Acabo de crear un almacén de confianza con la herramienta de claves de Java (para la autenticación de un servidor que no tiene un certificado de CA).Sin embargo, acabo de notar algo extraño.Estoy iniciando mi cliente así:

java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client

(Nota:NO hay una contraseña especificada)

La llamada anterior funciona.


Sin embargo, cuando intento esto:

java -classpath <STUFF> Client

No funciona.(Obviamente no funciona, requiere el almacén de confianza).


Esperaba tener que aprobar 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?¿La contraseña es sólo para modificación?¿Qué pasa con un almacén de claves?

¿Fue útil?

Solución

La contraseña se utiliza para proteger la integridad de un almacén de claves. Si usted no proporciona ninguna contraseña del almacén, todavía se puede leer el contenido del almacén de claves. El keytool -list comando muestra este comportamiento (utilizarlo con una contraseña vacía).

Otros consejos

Además de @ Pascal-thivent 's excelente respuesta:

La contraseña del almacén de claves tiene dos propósitos - si no se proporciona, keytool se niega a permitir que cambie el contenido de la tienda con nuevos contenidos por ejemplo, eliminando existente o la adición de nuevas entradas de certificado.

Por supuesto, si usted tiene acceso de escritura para actualizar el archivo de almacén de claves utilizando keytool (no es setuid), se podría sustituir el contenido utilizando otra herramienta que no comprobó la contraseña. Y sabemos que la tienda y su formato es legible sin una contraseña, por lo que presumiblemente podemos escribir lo que queremos allí.

Aquí es donde entra en la contraseña de verificación. Cuando las entradas de las tiendas son escritos de salida, la contraseña del almacén suministrado se utiliza para calcular un resumen de los almacenes contenidos, como salada por la contraseña. Este es un hash unidireccional / digerir, por lo que sin la contraseña, no se puede verificar si el contenido del almacén se han manipulado o no. Del mismo modo, una persona malintencionada que no conoce la contraseña tampoco puede modificar el contenido de la tienda, y producir el hash digerir que sería producida por esa contraseña.

Es por eso que cuando se suministran sin contraseña, keytool simplemente le advierte de que no se puede comprobar que el almacén no ha sido manipulado. Si proporciona una no válido contraseña, o la tienda de tiene sido manipulado, obtendrá un mensaje diferente:

Enter keystore password: keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

keytool fue incapaz de volver a crear el hash existentes digerir basado en el contenido actual de la tienda y la contraseña que proporcionó, así que o la contraseña es incorrecta, o el almacén de claves se ve comprometida - keytool no puede decir, pero se supone que usted o el software de lectura de la tienda sabe.

Tenga en cuenta que mientras que el término almacén de claves se utiliza generalmente, se refiere igualmente a keystores y almacenes de confianza . Menos-general, un almacén de claves es más a menudo un almacén de identidades y contiene las identidades y sus secretos, claves privadas, como se usa, por ejemplo, por un servidor que ejecuta HTTPS. Un almacén de confianza más a menudo sólo contiene las claves públicas y no hay claves privadas, por lo que no hay secretos, pero es importante determinar qué identidades de un cliente fideicomisos.

Si no se especifica un almacén de confianza, el defecto se utiliza en su lugar. Asumo, se produce un error, que necesitará para especificar un almacén de confianza con el fin de confiar en el host que solicita? Los reside trustStore por defecto en $ JAVA_HOME / lib / security / jssecacerts.

Por defecto, la contraseña del almacén de confianza es JRE "changeit". Si desea cambiar el almacén de confianza predeterminado (cacerts) contraseña mediante programación con Java, a continuación, por favor vaya a través de este enlace .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top