2010-02-26 11 views
20

Acabo de crear un almacén de confianza con java keytool (para la autenticación del servidor de un servidor que no tiene un certificado CA). Sin embargo, acabo de notar algo extraño. Estoy empezando mi cliente como esto:¿No necesita una contraseña para acceder a un almacén de confianza (hecho con la herramienta de claves java)?

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

(Nota: no hay una contraseña especificada)

Las obras de llamadas anteriores.


Sin embargo cuando intento esto:

java -classpath <STUFF> Client 

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


que estaba esperando a tener que pasar en esta opción (pero no lo hice):

-Djavax.net.ssl.trustStorePassword=mypass 

Pregunta: ¿No se necesita una contraseña para acceder a un almacén de confianza? ¿La contraseña es solo para modificación? ¿Qué tal un almacén de claves?

+0

@Pascal, sí. El servidor que estoy utilizando no tiene un certificado CA, por lo que necesita un almacén de confianza para que pueda hacer la autenticación ssl para el servidor. – sixtyfootersdude

+2

Tampoco entiendo por qué se necesita una contraseña para TrustSphere, que es la parte cliente de SSL. Específicamente, cuando una CA no está involucrada. ¿Has logrado resolver esto? –

Respuesta

28

La contraseña se utiliza para proteger la integridad de un almacén de claves. si no proporciona ninguna contraseña de tienda, puede leer los contenidos del almacén de claves. El comando keytool -list demuestra este comportamiento (úselo con una contraseña vacía).

+1

@sixtyfootersdude Sí, la integridad no está marcada pero, aún así, puede acceder al almacén de claves. –

+3

Esta respuesta trata sobre KeyStore pero la pregunta principal es sobre el TrustStore. Estoy confundido. –

-2

Si no especifica un almacén de confianza, se utiliza el predeterminado. Supongo que recibe un error, ¿necesita 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.

+3

Hola bfoo, sí, sabía que es allí donde falla pero que no responde mi pregunta. Claramente, el valor predeterminado no funciona y el que he especificado es. Mi pregunta es: ¿Para leer un almacén de confianza necesitas una contraseña? ¿Hay una contraseña predeterminada? – sixtyfootersdude

-1

De forma predeterminada, la contraseña de la tienda de confianza JRE es "changeit". Si desea cambiar la contraseña predeterminada del almacén de confianza (cacerts) mediante programación mediante Java, vaya a this link.

9

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

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 las entradas de certificado existentes o agregando nuevas.

Por supuesto, si tiene acceso de escritura para actualizar el archivo del almacén de claves usando keytool (no es setuid), puede reemplazar los contenidos utilizando otra herramienta que no verificó la contraseña. Y sabemos que la tienda y su formato son legibles sin una contraseña, así que presumiblemente podemos escribir lo que queremos allí.

Ahí es donde entra la contraseña de verificación. Cuando se anotan 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 salados por la contraseña. Este es un hash/digest de un solo sentido, por lo que sin la contraseña, no puede verificar si el contenido de la tienda ha sido alterado o no. Del mismo modo, alguien malicioso que no conoce la contraseña tampoco puede modificar el contenido de la tienda y producir el resumen de resumen que se generaría con esa contraseña.

Es por eso que cuando proporciona una contraseña sin contraseña, keytool acaba de advertirle que no puede verificar que la tienda no haya sido manipulada. Si proporciona una inválida contraseña, o la tienda ha 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 digesto basado en la corriente almacena el contenido y la contraseña que proporcionó, por lo que la contraseña es incorrecta o el almacén de claves está en peligro: keytool no se puede saber, pero supone que usted o el software que lee la tienda lo saben.

Tenga en cuenta que mientras que el almacén de claves término se utiliza generalmente, se refiere igualmente a keystores y almacenes de confianza. Menos generalmente, un almacén de claves es más a menudo una tienda de identidades y contiene identidades y sus claves privadas secretas, como se utiliza, por ejemplo. por un servidor que ejecuta HTTPS. Un truststore más a menudo contiene solo claves públicas y ninguna clave privada, por lo que no hay secretos, pero es importante determinar en qué identidades confía un cliente .

Cuestiones relacionadas