PKCS#12 : DerInputStream.getLength() exception

I had this problem and I've searched the depths of google and still couldn't find the answer. After some days battling with a terrible quality legacy code, I found what was causing this error.

KeyStore.load(InputStream is, String pass);

this method takes an InputStream and if there's any problem with such InputStream, this exception is thrown, some problems that I've encountered:

  • The InputStream points to the wrong / blank / just created file
  • The InputStream is already open or something else is holding the resource
  • The InputStream was already used and read, thus the position of the next byte of InputStream is it's end

The last one was the responsible for my problem. The code was creating an InputStream from a certificate, and proceeding to use it in two KeyStore.load() calls, the first one was successful, the second one always got me this error.


For others with a similar problem:

"keystore load: DerInputStream.getLength(): lengthTag=109, too big."

For me solution was to remove the param: -storetype pkcs12 since the standard type is jks


Probably the certificate you create has an extra character at the end which is misinterpreted to be another certificate. Use one or more blank lines at the end.

Refer: Java Certificate Parsing