Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

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:

Como evitar entonces la excepción? Muy sencillo, hay 2 alternativas.

  1. 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.
  2. 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.