我使用keytool命令生成证书:

keytool -genkeypair -alias myRSAKey -keyalg RSA -keysize 1024 -keystore test.p12 -storepass test -storetype pkcs12

然后,如果我尝试使用java安全性API加载它,则在将文件作为byte []获取后:
KeyStore ks = KeyStore.getInstance("PKCS12");
try{
   ks.load(new ByteArrayInputStream(data), "test".toCharArray())
} catch (Exception e){
   ...
}

我得到一个DerInputStream.getLength():lengthTag = 127,太大的异常。

怎么了?

最佳答案

我遇到了这个问题,我已经搜索了谷歌的深度,但仍然找不到答案。经过几天的苦苦挣扎之后,我发现了导致此错误的原因。

KeyStore.load(InputStream is, String pass);

此方法使用一个InputStream,如果此类InputStream出现任何问题,则会引发此异常,这是我遇到的一些问题:
  • InputStream指向错误/空白/刚创建的文件
  • InputStream已打开,或者其他正在容纳资源
  • 已经使用InputStream 并读取了,因此InputStream的下一个字节的位置是它的结尾

  • 最后一个是对我的问题负责。代码是根据证书创建一个InputStream,然后继续在两个KeyStore.load()调用中使用它,第一个成功,第二个总是让我遇到此错误。

    关于java - PKCS#12 : DerInputStream. getLength()异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7399154/

    10-13 21:27