El día de hoy comienzo una nueva categoría llamada «exceptions«, donde compartiré (en medida de lo posible) como resolver o evitar que en nuestras aplicaciones salten excepciones o al menos indicar la razón por la cual es arrojada. En esta oportunidad les traigo la siguiente exception:
Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
Esta excepción, se obtiene en Java 6 al haber discrepancias entre el tipo de instancia del keystore y el tipo de almacén de claves, al intentar cargar el almacén de claves. Por ejemplo si intentásemos cargar el almacén de claves desde un fichero .jks (jks es una implementación por defecto de Java para el almacenamiento de claves, que por ejemplo puede ser creado con el comando keytool del jsdk), habiendo indicado que la instancia del keystore es «pkcs12» en vez de haber utilizado el valor de «jks». Como el ejemplo a continuación:
1 2 3 4 5 |
FileInputStream fIn = new FileInputStream("path_del_repositorio_de_claves_jks"); KeyStore keystore = KeyStore.getInstance("pkcs12"); //Cargamos el repositorio de claves pasandole el password del repositorio keystore.load(fIn, passwordRepositorioClaves);//Aqui se lanzara la excepcion |
Como evitar entonces la excepción? Muy sencillo, hay 2 alternativas.
- Utilizar como tipo para obtener la instancia del keystore el valor de «jks» en vez de «pkcs12» (para este ejemplo específicamente), es decir utilizar el tipo adecuado para obtener la instancia del keystore.
- Cargar el almacén de claves adecuado, es decir, para este ejemplo sería indicar el path del certificado digital (por ejemplo de tipo .p12, .pfx) en vez de haber utilizado el path del fichero jks.
Espero pueda ser de utilidad y les quite al menos uno que otro dolor de cabeza. Cualquier información que consideres pueda ser de utilidad relacionada con esta excepción, no dudes en compartirla.