kar*_*ins 17 java security certificate pkcs#12
我使用keytool命令生成证书:
keytool -genkeypair -alias myRSAKey -keyalg RSA -keysize 1024 -keystore test.p12 -storepass test -storetype pkcs12
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试使用java安全API加载它,在将文件作为byte []获取后:
KeyStore ks = KeyStore.getInstance("PKCS12");
try{
ks.load(new ByteArrayInputStream(data), "test".toCharArray())
} catch (Exception e){
...
}
Run Code Online (Sandbox Code Playgroud)
我得到一个DerInputStream.getLength():lengthTag = 127,太大的异常.
怎么了?
ibr*_*ker 18
我有这个问题,我搜索谷歌的深度仍然找不到答案.经过几天与可怕的高质量遗留代码作斗争,我发现导致此错误的原因.
KeyStore.load(InputStream is, String pass);
Run Code Online (Sandbox Code Playgroud)
这个方法接受一个InputStream,如果这个InputStream出现任何问题,抛出这个异常,我遇到了一些问题:
最后一个是我的问题的责任.代码是从证书创建一个InputStream,并继续在两个KeyStore.load()调用中使用它,第一个成功,第二个总是让我犯这个错误.
对于有类似问题的其他人:
"keystore load: DerInputStream.getLength(): lengthTag=109, too big."
Run Code Online (Sandbox Code Playgroud)
对我来说,解决方案是删除参数:-storetype pkcs12
因为标准类型是jks
我的问题 ( lengthTag=109, too big) 是 .p12 文件实际上是 JKS 格式而不是 PKCS #12 格式。有人重命名了文件扩展名。通过以正确的 PKCS 格式重新生成解决了该问题。
java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.
at sun.security.util.DerInputStream.getLength(DerInputStream.java:599)
at sun.security.util.DerValue.init(DerValue.java:365)
at sun.security.util.DerValue.<init>(DerValue.java:320)
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1914)
at java.security.KeyStore.load(KeyStore.java:1445)
Run Code Online (Sandbox Code Playgroud)
要检查安全文件的格式,可以使用KeyStore Explorer打开该文件。左下栏显示实际格式。
| 归档时间: |
|
| 查看次数: |
47030 次 |
| 最近记录: |