2012-03-18 34 views
5

Necesito saber si es posible recuperar una clave de KeyStore sin proporcionar el 'storepass'. La documentación here dice que "Al recuperar información desde el almacén de claves, la contraseña es opcional, si no se da ninguna contraseña, la integridad de la información recuperada no puede ser comprobado y se muestra una advertencia"clave de obtención de KeyStore sin contraseña

Sin embargo cuando intento obtener la clave sin contraseña obtengo "java.lang.IllegalArgumentException: la contraseña no puede ser nula" excepción.

que sigue es cómo creé el almacén de claves

herramienta de claves -genseckey -alias "myKey" -keystore keystore.jks -storepass "contraseña" -storetype "JCEKS" -keyalg AES -keysize 128

Y traté de recuperarlo de la siguiente manera

final KeyStore keyStore = KeyStore.getInstance("JCEKS"); 
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")), 
    null); 
final Key key = keyStore.getKey("myKey", null); 

que arroja la siguiente excepción

java.lang.IllegalArgumentException: password can't be null 
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..) 
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..) 
at java.security.KeyStore.getKey(KeyStore.java:763) 

¿He entendido mal la documentación por completo? ¿Hay alguna otra forma de evitar esto, ya que no veo el punto de almacenar el 'storepass' en mi código de forma clara, donde todos puedan verlo, por lo tanto, hacer que la contraseña sea inútil.

Respuesta

4

Si no se proporciona storepass (que se utiliza para acceder a la clave privada), entonces intentará utilizar el keypass, es decir, la contraseña del almacén de claves, que tampoco proporciona.
Es por eso que obtiene la excepción.
No se puede tener tanto la keypass y storepass nula
Desde su enlace:

Para una opción -keypass, si no se especifica la opción en la línea de comandos , herramienta de claves intentará primero utilizar la contraseña del almacén de claves a recuperar la clave privada/secreta, y si esto no funciona, a continuación, le pedirá que para la contraseña de clave privada/secreta

+0

Sí, parece que tenía entendido bien el d ocupacion Entonces, ¿hay un enfoque recomendado para evitar esto? Simplemente no puedo tener una contraseña como esa en el código. Gracias – Nishant

+0

Entonces, ¿su problema es evitar la contraseña codificada en el código? Ese es el problema más común. Realmente no se puede hacer mucho al respecto. El enfoque recomendado en general es solicitar la contraseña del usuario. Si no puede hacerlo que puedes hacer algo elaborado, por ejemplo encripte la contraseña, pero eso no le proporcionará mucho. También puede delegar la responsabilidad al usuario, es decir, mantener seguro el sistema de archivos. – Cratylus

Cuestiones relacionadas