我无法在Android Studio中打开现有的密钥库文件或使用jarsigner命令行中的命令行.
在这两种情况下,错误消息是:
java.security.cert.CertificateException:无法初始化,java.io.IOException:DerInputStream.getLength():找到冗余长度字节
显然这是一个应该用JDK8_131解决的问题,但对我不起作用.(我们都在使用OSX)
我也在travis上得到了同样的错误.(参见下面的"更新"部分.)
我发现另一个SO问题(签署Android应用程序抛出IOException:发现冗余长度字节)他们将.pkc12文件转换为.keystore但我们已经在使用.keystore
我发现构建也开始在travis上失败,因为他们正在将构建版本移动到新的发行版trusty,下载最新的JDK,而precise默认使用JDK7.添加dist: precise到.travis.yml文件的顶部现在可以工作,但这绝对不是永久的解决方案.
我们是否只希望JDK更新能解决问题,还是有办法从密钥库中删除冗余长度字节?
我们正在开发Cordova应用程序,并且无法签署Android版本的应用程序.
使用命令
jarsigner -keystore keystore.p12 -storetype pkcs12 android-release-unsigned.apk 1
Run Code Online (Sandbox Code Playgroud)
给出以下例外
java.io.IOException: DerInputStream.getLength(): Redundant length bytes found
Run Code Online (Sandbox Code Playgroud)
来自OpenJDK中的这一行显然是为了修复CVE-2016-5546而添加的,虽然我不太了解加密来真正理解它.
使用openssl导出证书并从中创建新的p12工作正常,但更改签名,这意味着Play商店拒绝上传.
我们的密钥库来自另一家我们最初将应用程序开发外包给的公司.
任何jarsigner或keytool命令抛出相同的异常,我认为这是有意义的,因为它们都使用相同的Java lib